maven - 如何为 Maven 程序集插件自定义属性?

标签 maven variables properties maven-assembly-plugin

我有一个使用 Maven 编译的 Java 项目,最后 maven-assembly-plugin 用于将编译的 JAR 文件、DLL 等打包到 10 个不同的 ZIP 文件中。每个 ZIP 文件适用于不同的环境(具有不同的 DLL),但它们的内容通常是相同的。

现在我使用 10 个不同的 assembly.xml 文件来创建这 10 个 ZIP 文件。

问题是这些 XML 几乎相同,唯一的区别是 DLL 路径中的 1 个字。此类文件的示例:(实际上它要长得多)

<assembly>
  <id>{someVariable}</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <!-- Copying DLLs: -->
    <fileSet>
        <directory>target/dll/{someVariable}</directory>
        <outputDirectory>dll</outputDirectory>
        <includes>
            <include>*.dll</include>
        </includes>
    </fileSet>
  </fileSets>
</assembly>

如您所见,我想使用 {someVariable}在更多地方这是所需的功能,但我无法使其工作。希望这是可能的,这是我问题的核心。我想用同样的 assembly.xml文件并始终使用不同的值 {someVariable} 执行 10 次像这样:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
    <execution>
        <id>make-the-zip</id>
        <goals>
            <goal>single</goal>
        </goals>
        <phase>package</phase>
        <configuration>
            <descriptors>
                <descriptor>src/assembly/myCommonAssembly.xml</descriptor>
            </descriptors>
            <properties>
                <someVariable>my-value</someVariable>
            </properties>
        </configuration>
    </execution>
  </executions>
</plugin>

是否可以?仅供引用:第 <properties> 节不起作用,我只是想表明我想做什么。

我知道我可以在 poml.xml 中创建属性并在 assembly.xml 中使用它们但它并没有解决我的问题,因为我仍然需要创建 10 个不同的 assembly.xml 文件。

This是我找到的最好的建议,但它不是答案。

最佳答案

您可以使用 iterator-maven-plugin , 以便迭代所有不同的属性值。这个 Mojo 有一个 iterator 目标允许迭代一组给定的属性,并将它们添加为 Maven 属性:

The iterator-maven-plugin will inject the current value as a property which means you can use this property to parameterize your build.



在您的情况下,您可以:
<plugin>
  <groupId>com.soebes.maven.plugins</groupId>
  <artifactId>iterator-maven-plugin</artifactId>
  <version>0.4</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>iterator</goal>
      </goals>
      <configuration>
        <items>
          <item>my-value-1</item>
          <item>my-value-2</item>
          <item>my-value-3</item>
        </items>
        <pluginExecutors>
          <pluginExecutor>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-assembly-plugin</artifactId>
              <version>2.6</version>
            </plugin>
            <goal>single</goal>
            <configuration>
              <descriptors>
                <descriptor>${project.basedir}/src/assembly/myCommonAssembly.xml</descriptor>
              </descriptors>
            </configuration>
          </pluginExecutor>
        </pluginExecutors>
      </configuration>
    </execution>
  </executions>
</plugin>

package阶段,此配置将迭代 3 个给定值,my-value-1my-value-3 , 并且每次执行 Maven Assembly Plugin。对于给定的执行,可以使用 ${item} 检索当前迭代值。 .因此,您的通用程序集描述符将变为:
<assembly>
  <id>${item}</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <!-- Copying DLLs: -->
    <fileSet>
        <directory>target/dll/${item}</directory>
        <outputDirectory>dll</outputDirectory>
        <includes>
            <include>*.dll</include>
        </includes>
    </fileSet>
  </fileSets>
</assembly>

关于maven - 如何为 Maven 程序集插件自定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39739277/

相关文章:

java - 如何在Selenium TestNG环境中初始化Spring应用上下文文件

Android espresso maven 和 gradle 设置

php - PHP 上的矢量变量值

objective-c - 当设置为只读时,property_getAttributes() 不会区分保留、强、弱和分配属性

java - 如何在 MBean 描述中公开属性

java - 属性文件未按正确顺序存储

带有 jetty-maven-plugin 和 cdi 的 Maven 项目无法正常工作

android - Android:在库中包含所有图像资源

java - 将值连接到变量名称

javascript - 在 JavaScript 和 Angular 中动态地将变量插入到对象路径中