У меня есть проект maven2 с несколькими модулями jar, сборка проекта получит архивы .jar для каждого модуля в каталоге modules / XYZ / target / XYZ-x.x.x.jar
Теперь, если мой проект P имеет версию P-p.q.r, и я хочу сгенерировать одну банку P-p.q.r-all.jar со всеми включенными подмодулями, как мне это сделать?
Ответ 1 · рейтинг 19 · cetnar
То, что вы хотите достичь, называется uber jar. Этот модуль должен иметь зависимости от всех остальных подмодулей, которые вы хотите упаковать в одну банку. Если вы создадите другой подмодуль, который будет создавать желаемый артефакт, он может быть построен в реакторе со всеми его зависимостями, но если это будет отдельный проект, вам необходимо установить все зависимости uber jar.
| parent
| -- submodule1
...
| -- submoduleN
| -- uberjarSubmodule
Uber jar можно сделать, используя:
maven-shade-plugin - в вашем случае вы должны не забыть исключить транзитивные зависимости от ваших модулей
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>classworlds:classworlds</exclude>
<exclude>junit:junit</exclude>
<exclude>jmock:jmock</exclude>
<exclude>xml-apis:xml-apis</exclude>
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
maven-assembly-plugin - в этот вопрос вы найдете подробный ответ
Ответ 2 · рейтинг 1 · Clinton
Зависит от того, как вы собираетесь это отправить, если ваш jar - это библиотека, которую вы хотите, чтобы другие разработчики загружали и использовали через maven. Вы должны указать их как зависимости в проекте pom.
Если вы пытаетесь отправить что-то конечному пользователю, который просто хочет получить двоичный файл и использовать ваш проект, вы можете попробовать использовать сборка для упаковки вашего проекта. С помощью этого плагина вы можете упаковать jar вместе с его зависимостями. Он не поместит все это в один файл jar, но если вы правильно настроите путь к классам пользователей, это не имеет значения.