Экспорт проекта Maven с подпроектом в jar-файл

Я пишу много плагинов для сервера minecraft bukkit, и я устал копировать + вставлять одни и те же служебные классы в свои проекты снова и снова. Я решил просто поместить их все в отдельный проект и добавить в свои плагины через maven. Я использую IntelliJ Ultimate.

Я хочу иметь проект maven, который содержит все мои служебные классы, называемые, например. UtilityAPI. Затем я хочу иметь возможность создать еще один проект, который будет моим плагином bukkit. В этом втором проекте я хочу иметь возможность использовать весь код из первого. Кроме того, мне бы очень хотелось, чтобы, если я решу создать jar-плагин, maven автоматически учитывает самый последний код из моего API-проекта.

Я начал работать над этим и начал читать о модулях maven и о том, как их можно использовать для создания разных проектов вместе. Сначала я подумал, что это как раз то, что мне нужно, и попытался просто добавить

<modules>
    <module>UtilityAPI</module>
</modules>

Однако это приводит к тому, что мой проект плагина bukkit считается родительским проектом и отказывается собираться в jar, а просто в (по крайней мере, для меня) довольно бесполезном .pom файле. Я не уверен, что делать дальше. Должен ли я создавать «родительский» проект для моего проекта плагина bukkit, который содержит API и проект плагина в качестве модулей? И если да, то как сгенерировать .jar, а не .pom?

Решением мечты было бы иметь проект UtilityAPI и иметь возможность включать его в любые новые плагины, которые я мог бы написать в будущем. Я также был бы поклонником простого способа создать банку с новейшими исходными кодами моего плагина. Возможно ли это, и если да, то как?

Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
0
0
163
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем многомодульном проекте Maven ваш плагин должен быть другим модулем (а не родительским, который имеет тип упаковки pom). Тогда этот модуль будет иметь зависимость от модуля API (возможны зависимости между модулями).

Однако многомодульные проекты обычно предназначены для тесно связанных проектов. Это не похоже на ваш сценарий. Похоже, что плагины не имеют (потенциально) ничего общего, кроме зависимости от проекта API. Возможно, было бы лучше иметь проект API как отдельный автономный проект Maven, а затем развернуть его версии моментальных снимков (или install их только в вашем локальном репозитории Maven) и использовать их в своих проектах плагинов.

Хм, хорошо, я так и сделаю. Есть ли способ сообщить intellij, что я хочу сначала установить новейшую версию моего API-проекта, а затем создать свой настоящий плагин?

monamona 21.12.2020 21:07

@monamona, если вы занимаетесь только локальной разработкой, то, похоже, вы можете одновременно открывать несколько проектов Maven в IntelliJ, и (согласно ответам) IntelliJ создает проекты без необходимости создавать проекты вручную, см. stackoverflow .com/questions/8774024/…; однако я не тестировал его. Хотя, когда вы хотите создать файл .jar, вам, вероятно, все равно придется запускать команды Maven вручную.

Marcono1234 21.12.2020 21:38

Другие вопросы по теме