Maven包阶段:如何依赖其他项目的包工件
Maven package phase: how to depend on package artifacts from other projects
我有这个 Maven 项目结构:
-- top
-- a
produces a.jar and a-capsule-fat.jar
-- b
produces b.jar and b-capsule-fat.jar
-- pkg
produces all.tar.gz, which contains a-capsule.jar and b-capsule.jar
我正在使用 capsule-maven-plugin
在几个项目中构建 fat jar,如上所示。通常 capsule
在 package
阶段是 运行。然后我想 assemble 将胶囊罐放入 tar.gz
以进行部署。我在项目 pkg
中使用 maven-assembly-plugin
来制作 tar.
但是 maven-assembly-plugin
通常也在 package
阶段 运行s,并且在创建胶囊罐之前是 运行ning。
我可以指定一个程序集依赖项或顺序来强制 Maven 首先创建胶囊罐吗?或者我可以在以后的阶段构建程序集,但是没有真正合适的以后的程序集(在 install
? 中没有 post-package
)。
POST-答案:我包括了一些后代的工作代码:
pkg/pom.xml
中的依赖项:
<dependency>
<groupId>thegroup</groupId>
<artifactId>a</artifactId>
<version>theVersion</version>
<type>jar</type>
<classifier>capsule-fat</classifier>
</dependency>
<dependency>
<groupId>thegroup</groupId>
<artifactId>b</artifactId>
<version>theVersion</version>
<type>jar</type>
<classifier>capsule-fat</classifier>
</dependency>
pkg/pom.xml
中的程序集插件设置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>build-tar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>src/main/assembly/pkg.xml</descriptor>
</descriptors>
</configuration>
</plugin>
pkg.xml(以上引用):
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>ustc-archive-pkg</id>
<formats>
<format>tar.gz</format>
</formats>
<dependencySets>
<dependencySet>
<includes>
<include>*:jar:capsule-fat</include>
</includes>
</dependencySet>
</dependencySets>
</assembly>
确保 capsule-maven-plugin 的定义出现在 maven-assembly-plugin 之前。当有执行绑定到同一阶段时,Maven 使用 POM 中插件定义的顺序来打破平局。
----编辑----
确保 a
和 b
的依赖项包含分类器:
<dependency>
<groupId>theGroup</groupId>
<artifactId>a</artifactId>
<version>theVersion</version>
<classifier>capsule-fat</classifier>
</dependency>
看看是否可以。
我有这个 Maven 项目结构:
-- top
-- a
produces a.jar and a-capsule-fat.jar
-- b
produces b.jar and b-capsule-fat.jar
-- pkg
produces all.tar.gz, which contains a-capsule.jar and b-capsule.jar
我正在使用 capsule-maven-plugin
在几个项目中构建 fat jar,如上所示。通常 capsule
在 package
阶段是 运行。然后我想 assemble 将胶囊罐放入 tar.gz
以进行部署。我在项目 pkg
中使用 maven-assembly-plugin
来制作 tar.
但是 maven-assembly-plugin
通常也在 package
阶段 运行s,并且在创建胶囊罐之前是 运行ning。
我可以指定一个程序集依赖项或顺序来强制 Maven 首先创建胶囊罐吗?或者我可以在以后的阶段构建程序集,但是没有真正合适的以后的程序集(在 install
? 中没有 post-package
)。
POST-答案:我包括了一些后代的工作代码:
pkg/pom.xml
中的依赖项:
<dependency>
<groupId>thegroup</groupId>
<artifactId>a</artifactId>
<version>theVersion</version>
<type>jar</type>
<classifier>capsule-fat</classifier>
</dependency>
<dependency>
<groupId>thegroup</groupId>
<artifactId>b</artifactId>
<version>theVersion</version>
<type>jar</type>
<classifier>capsule-fat</classifier>
</dependency>
pkg/pom.xml
中的程序集插件设置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>build-tar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>src/main/assembly/pkg.xml</descriptor>
</descriptors>
</configuration>
</plugin>
pkg.xml(以上引用):
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>ustc-archive-pkg</id>
<formats>
<format>tar.gz</format>
</formats>
<dependencySets>
<dependencySet>
<includes>
<include>*:jar:capsule-fat</include>
</includes>
</dependencySet>
</dependencySets>
</assembly>
确保 capsule-maven-plugin 的定义出现在 maven-assembly-plugin 之前。当有执行绑定到同一阶段时,Maven 使用 POM 中插件定义的顺序来打破平局。
----编辑----
确保 a
和 b
的依赖项包含分类器:
<dependency>
<groupId>theGroup</groupId>
<artifactId>a</artifactId>
<version>theVersion</version>
<classifier>capsule-fat</classifier>
</dependency>
看看是否可以。