使用 Maven 程序集插件分离罐子
Seperate the jars using maven assembly plugin
我需要将 jar 分成不同的文件夹。
在我的项目中,我有几个模块,即:module1、module2 和 assembly。
通过使用 maven 程序集插件,我想将 modules1 和 module2 生成的 jar 放入 target/modules 并将所有依赖项放入 target/dependencies。
我怎样才能达到这个要求?
谢谢
基于您的项目结构如下:
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>
您还必须在 assembly/pom.xml
中添加 maven-assembly-plugin
:
<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
、...)
- 首先
dependencySet
定义了一个文件夹 modules/
,其中将放置来自同一 groupId
的所有工件。在这里您还可以控制是否只需要某些工件(例如,如果您只需要 module1
)。 assembly
JAR 已从该文件夹中排除,因为该模块仅用于创建程序集
- second
dependencySet
定义了一个文件夹 dependencies/
,所有依赖项(和传递依赖项)都将放在其中。此处的依赖性意味着 具有不同 groupId
的工件,如 excludes
子句 所述
mvn package
将生成程序集(在 assembly/target/
文件夹中),命名为 assembly-${project.version}-bin
,具有您想要的结构。
我需要将 jar 分成不同的文件夹。
在我的项目中,我有几个模块,即:module1、module2 和 assembly。
通过使用 maven 程序集插件,我想将 modules1 和 module2 生成的 jar 放入 target/modules 并将所有依赖项放入 target/dependencies。
我怎样才能达到这个要求?
谢谢
基于您的项目结构如下:
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>
您还必须在 assembly/pom.xml
中添加 maven-assembly-plugin
:
<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
、...)- 首先
dependencySet
定义了一个文件夹modules/
,其中将放置来自同一groupId
的所有工件。在这里您还可以控制是否只需要某些工件(例如,如果您只需要module1
)。assembly
JAR 已从该文件夹中排除,因为该模块仅用于创建程序集 - second
dependencySet
定义了一个文件夹dependencies/
,所有依赖项(和传递依赖项)都将放在其中。此处的依赖性意味着 具有不同groupId
的工件,如excludes
子句 所述
mvn package
将生成程序集(在 assembly/target/
文件夹中),命名为 assembly-${project.version}-bin
,具有您想要的结构。