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,如上所示。通常 capsulepackage 阶段是 运行。然后我想 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 中插件定义的顺序来打破平局。

----编辑----

确保 ab 的依赖项包含分类器:

<dependency>
    <groupId>theGroup</groupId>
    <artifactId>a</artifactId>
    <version>theVersion</version>
    <classifier>capsule-fat</classifier>
</dependency>

看看是否可以。