Исходя из того, что ваш проект структурирован как:
project
|- module1
|- module2
|- assembly
|- pom.xml
|- src
|- assembly
|- bin.xml
assembly
должно зависеть от module1
и module2
;установите эти зависимости в assembly/pom.xml
:
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>module1</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>module2</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
Вы также должны добавить maven-assembly-plugin
в assembly/pom.xml
:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptors>
<descriptor>src/assembly/bin.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
assembly:single
привязан к фазе package
, чтобысоздать сборку при запуске mvn package
.
Наконец, определите assembly/src/assembly/bin.xml
следующим образом:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>bin</id>
<formats>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>modules</outputDirectory>
<includes>
<include>${project.groupId}:*:*</include>
</includes>
<excludes>
<exclude>${project.groupId}:${project.artifactId}:*</exclude>
</excludes>
</dependencySet>
<dependencySet>
<useTransitiveDependencies>true</useTransitiveDependencies>
<outputDirectory>dependencies</outputDirectory>
<excludes>
<exclude>${project.groupId}:*:*</exclude>
</excludes>
</dependencySet>
</dependencySets>
</assembly>
format
определяет формат, который вы хотите для сборки (здеськаталог, но может быть tar.gz
, zip
, ...) - first
dependencySet
определяет папку modules/
, в которую будут помещены все артефакты из одного и того же groupId
.Здесь вы также можете контролировать, хотите ли вы только некоторые из артефактов (например, если вы хотите только module1
).assembly
JAR исключен из этой папки, так как этот модуль используется только для создания сборки. - секунда
dependencySet
определяет папку dependencies/
, в которую будут помещены все зависимости (и транзитивные зависимости).Зависимость здесь означает артефакт с другим groupId
, поскольку говорится, что excludes
предложение
mvn package
будет генерировать сборку (в папке assembly/target/
) с именемassembly-${project.version}-bin
, с нужной вам структурой.