Как построить Uberjars с зависимостями
У меня есть модуль Maven, генерирующий файл JAR. Меня попросили разработать пару других файлов uberjar как побочный продукт процесса сборки. Мне также сказали, что эти 2 jar-файла являются jar-файлами апплета, которые необходимо включить в некоторые классы из зависимостей модуля maven.
Я оглянулся и сузился до этих 3 вариантов -
- Плагин Maven Assembly - может создавать пользовательские jar-файлы из классов, сгенерированных модулем maven. Сторонние зависимости не могут быть включены.
- Используйте ant через Maven - используйте maven-dependency-plugin, чтобы распаковать зависимости, а затем упаковать jar апплета через ant-скрипты.
- Используйте плагин Maven Shade - хотя этот плагин не подходит для моего требования, я могу заставить его работать.
Хотя я могу заставить вещи работать с (b) и (c), я не могу решить, какой из них использовать. Одна ключевая вещь, которую я заметил, это использование плагина зависимостей, занимающего много времени.
Я хотел знать, есть ли другие способы достичь того же требования.
2 ответа
Вы можете включить зависимости, используя плагин сборки с dependencySet
элементы см.:
В частности, вот пример, взятый из блога Эндрю Бруно:
<dependencySets>
<dependencySet>
<outputDirectory></outputDirectory>
<outputFileNameMapping></outputFileNameMapping>
<unpack>true</unpack>
<scope>runtime</scope>
<includes>
<include>commons-lang:commons-lang</include>
<include>commons-cli:commons-cli</include>
</includes>
</dependencySet>
</dependencySets>
Наконец, я использовал плагин сборки, используя тот же подход, который вы описали выше. Я отошел от плагина Shade, так как я генерирую несколько сборок с использованием ресурсов извне Maven, и у плагина Shade нет большой поддержки для таких задач.