Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап Отладка плагина в IDE (maven, только локально)

Reality_SC

Старожил
Пользователь
Баллы
123
Имя в Minecraft
Reality_SC
Объяснение по названию.
Данный maven-плагин создавался с целью упростить получение серверного ядра для отладки плагинов и разрабатывался с упором на скачивание .jar / .zip с интернет-ресурса Yive's Mirror. К сожалению, данный сайт приказал долго жить, и сейчас плагин ориентируется на запуск сервера из локально расположенного .jar / .zip серверного ядра. Однако, поскольку и сам проект уже находится в стадии только фикса багов, проводить его rename-инг считаю избыточным.

Краткое описание.

Данный плагин для системы сборки Maven осуществляет следующие действия:
  • Подготавливает определённым образом каталог для запуска сервера (внутри /target).
  • Запускает сервер, позволяя разработчику пользоваться всеми средствами IDE для отладки.
Краткая инструкция.
Инструкция в картинках в следующем посте.

Откройте ваш pom.xml.

Добавьте следующий репозиторий, чтобы позволить Maven найти на просторах интернета нужный плагин:
XML:
<pluginRepositories>
    <pluginRepository>
        <id>yivemirror-maven-plugin-repo</id>
        <url>https://simsonic.github.io/yivemirror-maven-plugin/</url>
    </pluginRepository>
</pluginRepositories>

В настройки сборки проекта добавьте следующий плагин:
XML:
<plugin>
    <groupId>ru.simsonic.minecraft</groupId>
    <artifactId>yivemirror-maven-plugin</artifactId>
    <version>1.4-SNAPSHOT</version>
    <configuration>
        <serverJar>../my_own_server.jar</serverJar>
        <directory>server</directory>
        <resources>server-resources</resources>
    </configuration>
</plugin>
Здесь присутствуют следующие настройки:
  • serverJar — относительный путь к .jar (или .zip) файлу с ядром. Данный файл будет закеширован плагином при первом запуске (если это .zip — вместе со всеми дополнительными файлами в нём, обычно это папка libraries).
  • directory — название каталога в /target, где будут расположены файлы настроек запускаемого сервера, папки с мирами и плагинами. Например, для значения server каталог запуска будет /target/server/.
  • resources — относительный путь к каталогу, файлы из которого будут скопированы в каталог сервера непосредственно перед запуском. Предназначен для хранения плагинов-зависимостей, настроек, заранее созданных миров и т.п.).
Далее создайте конфигурацию запуска Maven с такими параметрами:
Код:
> mvn clean verify yivemirror:run
clean — удалит каталог /target, verify — создаст его и соберёт .jar вашего плагина, yivemirror:run — подготовит каталог для запуска указанного spigot-сервера, скопирует туда .jar плагина и запустит указанный сервер.

Известные ограничения и способы их обхода.

Часть серверных файлов создаётся в корневой папке проекта (eula.txt, help.ylm, ops.json и др.)
Для того, чтобы эти файлы располагались в другом каталоге (/target/server), необходимо запускать JVM с необходимым текущим каталогом. Поскольку maven-плагин запускается IDE, не существует возможности её изменить (изменение user.dir неполноценно, варианты с JNI тоже кажутся излишними, прокидывать JWDT отладку в дочерний процесс не получится).
Тоже самое относится к каталогу /logs. Приемлемым вариантом может быть добавление всех этих файлов в .gitignore.

Файлы server.properties, commands.yml, bukkit.yml, spigot.yml, paper.yml располагаются в /target/server/ (т.к. их расположение указывается параметрами командной строки).

Исходный код.

Данный maven-плагин является open-source проектом. Исходный код расположен здесь.

Также имеется пример корректной настройки pom.xml в подпроекте example.

На момент публикации статьи плагин находится в состоянии proof-of-concept и по сути представляет собой minimal valuable product. В ближайшее время его ожидает критический рефакторинг и расширение функционала, поэтому прошу пока воздержаться от форков и PR (тем не менее я, конечно, буду их рассматривать).

На сегодняшний день у меня нет какого-либо собственного общедоступного хостинга, поэтому до появления такового артефакты будут расположены в основном репозитории и доступны через GitHub Pages (но я рекомендую вам никогда так не делать!). Если появится хостинг, то я постараюсь опубликовать плагин в Maven Central.

Changelog.
  • 1.1-SNAPSHOT: Реализована поддержка PaperSpigot (serverType = "paper_spigot")
  • 1.2-SNAPSHOT: Корректная работа с версиями "latest" (определение изменений по размеру файла)
  • 1.4-SNAPSHOT: Поддержка .zip (полезно при работе с Thermos); локально расположенных файлов; исправлено много багов.
 
Последнее редактирование:
Решил сделать инструкцию в картинках.

Для примера решил взять свой же маленький и старый (времён гавнокода) плагин rscWorldEditDrops.

1. Склонируем репозиторий себе и откроем проект в IDE.
upload_2018-5-22_10-59-41.png

2. Откроем pom.xml и добавим согласно инструкции репозиторий и плагин сборки:
upload_2018-5-22_10-32-7.png

3. Создаём конфигурацию запуска
upload_2018-5-22_10-32-49.pngupload_2018-5-22_10-33-33.png

4. Нажимаем Debug, сервер закачивается и запускается. Так как плагину нужен для запуска WE, видим следующее:
upload_2018-5-22_10-37-13.png

5. Создадим в корневой папке исходников папку с ресурсами сервера, которые нужно предварительно скопировать в /target/server/:
upload_2018-5-22_10-41-58.png

6. Перезапускаем отладку ещё раз:
upload_2018-5-22_10-43-36.png

Видим, что сервер, WorldEdit и разрабатываемый плагин успешно загружены. Консоль IDE используется для вывода лога и ввода команд.

7. Поставим breakpoint в обработчике команд и введём команду в консоли:
upload_2018-5-22_10-46-37.png

Всё прекрасно работает!


P. S. Полезные фичи.

  • Добавим всякий трешак в .gitignore, чтобы случайно не закоммитить его:
    upload_2018-5-22_10-39-40.png
  • Можно перенести мир(ы) в server-resources, чтобы новый мир не генерировался при каждом перезапуске сервера — копирование быстрее генерации.
    В зависимости от вашего решения ресурсы можно коммитить или игнорировать.
    Также можно полностью отключить генерацию Нижнего мира и Края.
    Перезапуск отладки плагина в новом чистом окружении у меня занимает около 9-10 секунд (сам сервер информирует о Done за 1.5 - 2 секунды).
  • Чтобы узнать корректное название нужной версии сборки сервера достаточно подсмотреть её на сайте Yive's Mirror:
    upload_2018-5-22_11-1-24.png
  • Пропишите в spigot.yml настройку settings.timeout-time: 2147483647
    чтобы сервер не падал, когда вы останавливаетесь на breakpoint-е надолго.
Удачной и удобной разработки!
 
Последнее редактирование:
Обновлено до 1.4:
  • Так как Yive's Mirror того, то пришло поддержать файлы серверов, расположенные локально (настройка configuration > serverJar).
  • В ней можно указать не только .jar, но и .zip — главное, чтобы внутри него в корне лежал один .jar (и что угодно кроме него).
 
Нет, не создаётся. Это ты сам можешь опционально указать какую-то папку, из которой следует копипастить всё содержимое в папку непосредственно перед запуском.
 
preview

Может всё это и даже больше. (тыц)
 

Поделиться этой страницей

Назад
Верх