Maven создает два исполняемых jar-файла с разными зависимостями.

В моем приложении, созданном Maven, у меня есть две зависимости от платформы, которые являются взаимоисключающими. Во время сборки проекта я хотел бы создать два исполняемых jar-файла, где один jar-файл содержит одну зависимость, а второй jar-файл содержит другую зависимость.

Моей первой мыслью было создать два профиля сборки, каждый из которых содержит одну из зависимостей и плагин Maven Assembly или Shade для создания исполняемого jar-файла. К сожалению, это не работает, потому что будет построена только одна из банок. Я попытался включить оба в командной строке (-Pprofile1,profile2), установив для обоих activeByDefault значение true, но все равно не повезло.

Прежде чем я попытаюсь обойти это, создав два подмодуля проекта для выполнения сборок, есть ли способ создать два исполняемых jar-файла с разными зависимостями в одном проекте Maven?


person jzonthemtn    schedule 18.05.2017    source источник
comment
Ваша стратегия с двумя профилями должна работать; вы делаете что-то не так, если строится только один. Покажите pom.xml с настройкой, если это возможно. Кстати, флаг activeByDefault немного странный. Возможно, вы используете один и тот же идентификатор для выполнения в обоих профилях?   -  person Andrei    schedule 18.05.2017
comment
@Andrei Спасибо, что подтвердили это - я сделаю это еще раз и все перепроверю.   -  person jzonthemtn    schedule 18.05.2017
comment
Не волнуйтесь; относительно моего комментария об идентификаторах выполнения: если вы просто объявляете плагин в обоих профилях (без тега èxecution), то я думаю, что один переопределяет другой, потому что все они запускаются при выполнении default-jar (я думаю, что это идентификатор выполнения по умолчанию ). Если это так, просто объявите два отдельных выполнения, по одному в каждом профиле, обязательно указав разные идентификаторы.   -  person Andrei    schedule 18.05.2017
comment
Аналогичный вопрос находится по адресу: stackoverflow.com/questions/8726884/ .   -  person Shailesh Pratapwar    schedule 19.05.2017
comment
Ваша мысль об использовании двух разных модулей — лучший и самый чистый способ решить проблему (разделение задач). Профили не будут работать в конце концов. Чтобы собрать релиз, вы просто вызовете mvn clean deploy и получите все, что вам нужно. Это возможно только при установке двух модулей. Если вы используете с профилями, этот простой вызов не будет работать.   -  person khmarbaise    schedule 19.05.2017
comment
Я предлагаю вам поделиться своим pom.xml, чтобы мы могли посмотреть. Одна из причин, по которой выполнение плагина в двух профилях не будет работать, заключается в том, что если <execution/> в обоих профилях имеет один и тот же <id/>, поскольку, по сути, второй плагин переопределит выполнение первого.   -  person carlspring    schedule 19.05.2017


Ответы (1)


Для тех, кто заинтересован, использование двух отдельных модулей было лучшим решением для меня. Есть один проект («основной»), содержащий весь код. Есть два других проекта, в которых каждый проект объявляет зависимость, которая требуется для его конкретной платформы, и проект «основной». Затем каждый проект создает исполняемый файл jar для своей платформы.

person jzonthemtn    schedule 11.06.2017