2

我有许多 Maven 项目,它们为 3rd 方应用程序构建插件框架的各种组件。我有一个主项目,它使用聚合(<modules> 元素),包括所有子项目。这个主项目还调用了 maven assembler 插件。我现在可以构建所有子项目并让汇编器将它们的输出/文件/源/资源等复制到主构建目录中,然后将所有这些文件压缩到单个分发 zip 中。我使用以下命令执行此操作:

mvn 包组装:组装

这一切都很好。我现在想将此 zip 文件传递​​到另一个 maven 插件,该插件将打开它并创建一个列出 zip 内容的自定义清单文件,然后将此清单文件插入回 zip 文件中。我已经编写了插件来做到这一点,它工作正常。

我的问题是让这个插件作为构建过程的一部分由 maven 运行。

该插件需要汇编器的输出,但似乎没有在汇编器之后运行插件。

任何人都可以帮忙吗?

4

1 回答 1

1

假设程序集已经定义为在目标/程序集中创建程序集,您只需将插件的执行绑定到标准生命周期的阶段,这样您就可以运行mvn install(例如)并在该生命周期内执行插件。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
      <execution>
        <id>generate-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <!--your configuration here -->
          ...
        </configuration>
      </execution>
    </executions>
  </plugin>

然后,您将插件的执行绑定到稍后阶段(例如集成测试),以便它能够访问程序集文件:

  <plugin>
    <groupId>your.plugin.groupId</groupId>
    <artifactId>your-artifactId</artifactId>
    <executions>
      <execution>
        <id>mung-manifests</id>
        <phase>package</phase>
        <goals>
          <goal>your-goal-name</goal>
        </goals>
        <configuration>
          <assemblyDirectory>${project.build.directory}/assemblies</assemblyDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

使用这种方法,每个插件将在您运行时mvn package(或后续阶段,如安装、验证、部署......)在相关阶段(包)中执行。

请注意,您的插件应该在组装插件之后定义,以确保它在之后执行(如果它们处于不同阶段,则顺序无关紧要,仅在同一阶段时)。

于 2009-09-18T15:48:27.357 回答