1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Reality_SC, 21 май 2018.

  1. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

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

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

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

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

    Добавьте следующий репозиторий, чтобы позволить Maven найти на просторах интернета нужный плагин:
    Код:
    <pluginRepositories>
        <pluginRepository>
            <id>yivemirror-maven-plugin-repo</id>
            <url>https://simsonic.github.io/yivemirror-maven-plugin/</url>
        </pluginRepository>
    </pluginRepositories>
    В настройки сборки проекта добавьте следующий плагин:
    Код:
    <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); локально расположенных файлов; исправлено много багов.
     
    Последнее редактирование: 16 дек 2018
  2. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Решил сделать инструкцию в картинках.

    Для примера решил взять свой же маленький и старый (времён гавнокода) плагин 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.png upload_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-е надолго.
    Удачной и удобной разработки!
     
    Последнее редактирование: 29 май 2018
  3. Energy warrior

    Energy warrior Активный участник Пользователь

    Баллы:
    76
  4. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Обновлено до 1.4:
    • Так как Yive's Mirror того, то пришло поддержать файлы серверов, расположенные локально (настройка configuration > serverJar).
    • В ней можно указать не только .jar, но и .zip — главное, чтобы внутри него в корне лежал один .jar (и что угодно кроме него).
     
  5. InterWall

    InterWall Старожил Пользователь

    Баллы:
    173
    А что там случилось то? Почему закрылись?
     
  6. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    ¯\_(ツ)_/¯
     
  7. iForgotPassword

    iForgotPassword Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    iForgotPassword
    @Reality_SC
    server-resources не создается? Или я тупой?
     
  8. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Нет, не создаётся. Это ты сам можешь опционально указать какую-то папку, из которой следует копипастить всё содержимое в папку непосредственно перед запуском.
     
  9. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    [​IMG]
    Может всё это и даже больше. (тыц)
     

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