如何使用不同的 属性 执行两次 Maven 插件
How to execute a maven plugin twice with different property
我想从 maven pom 运行 构建同一个插件的两个顺序执行,在同一个阶段中仅相差一个 属性,这将导致两个不同的存档创建。由于配置相当复杂,我宁愿不复制它只是为了更改一个值,这会造成维护噩梦。如果能以某种方式在插件配置的 <executions>
部分定义这样的 属性,我就可以避免这种头痛。
问题:这可能吗?如果可能的话怎么办?
更新:两个答案提到了使用多次执行,其中一个提到您可以在每次执行中有单独的配置。但是考虑到我的大部分配置在两次执行之间是不变的,我可以在插件级别有一个配置,并且在每次执行中也有不同部分的配置部分吗?
您需要创建不同的执行(仍然绑定到同一阶段)
为避免重复配置,您可以将 <configuration>
放在 <execution>
元素之外,然后在 2 次执行中,您只定义不同的 属性。
取自行家docs:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-myquery-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>execution1</id>
<phase>test</phase>
<configuration>
<url>http://www.foo.com/query</url>
<timeout>10</timeout>
<options>
<option>one</option>
<option>two</option>
<option>three</option>
</options>
</configuration>
<goals>
<goal>query</goal>
</goals>
</execution>
<execution>
<id>execution2</id>
<configuration>
<url>http://www.bar.com/query</url>
<timeout>15</timeout>
<options>
<option>four</option>
<option>five</option>
<option>six</option>
</options>
</configuration>
<goals>
<goal>query</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
您在 声明中创建了两个 元素。每个 元素都可以有自己的 部分。
给定简单的 Maven Source Plugin 配置(作为示例),您在其所有执行(在 executions
元素之外)之间有一个共享配置,然后每个执行在同一阶段都有一个自定义配置,根据您的问题要求:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<configuration>
<includePom>true</includePom>
</configuration>
<executions>
<execution>
<id>test-id1</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<finalName>aaa</finalName>
</configuration>
</execution>
<execution>
<id>test-id2</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<finalName>bbb</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在这种情况下,配置条目 <includePom>true</includePom>
将与每次执行的自定义配置合并,因此将通用配置集中为插件通用配置。
有关不同级别配置的更多详细信息,您可以查看官方 Maven 文档,here, in particular the example "Configuring compile to run twice". Further details are also available on the official POM documentation, here,插件部分。
我想创建一个 jar 并与其他配置文件一起放入一个 zip 文件中
这对我有用
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>build-jar-with_dep1</id>
<phase>package</phase>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>${buildversion}</finalName>
<finalName>finalname</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<goals>
<goal>assembly</goal>
</goals>
</execution>
<execution>
<id>build_zip1</id>
<phase>package</phase>
<configuration>
<descriptor>src/assembly/bin.xml</descriptor>
<finalName>${buildversion}</finalName>
<finalName>finalname</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
我想从 maven pom 运行 构建同一个插件的两个顺序执行,在同一个阶段中仅相差一个 属性,这将导致两个不同的存档创建。由于配置相当复杂,我宁愿不复制它只是为了更改一个值,这会造成维护噩梦。如果能以某种方式在插件配置的 <executions>
部分定义这样的 属性,我就可以避免这种头痛。
问题:这可能吗?如果可能的话怎么办?
更新:两个答案提到了使用多次执行,其中一个提到您可以在每次执行中有单独的配置。但是考虑到我的大部分配置在两次执行之间是不变的,我可以在插件级别有一个配置,并且在每次执行中也有不同部分的配置部分吗?
您需要创建不同的执行(仍然绑定到同一阶段)
为避免重复配置,您可以将 <configuration>
放在 <execution>
元素之外,然后在 2 次执行中,您只定义不同的 属性。
取自行家docs:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-myquery-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>execution1</id>
<phase>test</phase>
<configuration>
<url>http://www.foo.com/query</url>
<timeout>10</timeout>
<options>
<option>one</option>
<option>two</option>
<option>three</option>
</options>
</configuration>
<goals>
<goal>query</goal>
</goals>
</execution>
<execution>
<id>execution2</id>
<configuration>
<url>http://www.bar.com/query</url>
<timeout>15</timeout>
<options>
<option>four</option>
<option>five</option>
<option>six</option>
</options>
</configuration>
<goals>
<goal>query</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
您在
给定简单的 Maven Source Plugin 配置(作为示例),您在其所有执行(在 executions
元素之外)之间有一个共享配置,然后每个执行在同一阶段都有一个自定义配置,根据您的问题要求:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<configuration>
<includePom>true</includePom>
</configuration>
<executions>
<execution>
<id>test-id1</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<finalName>aaa</finalName>
</configuration>
</execution>
<execution>
<id>test-id2</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<finalName>bbb</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在这种情况下,配置条目 <includePom>true</includePom>
将与每次执行的自定义配置合并,因此将通用配置集中为插件通用配置。
有关不同级别配置的更多详细信息,您可以查看官方 Maven 文档,here, in particular the example "Configuring compile to run twice". Further details are also available on the official POM documentation, here,插件部分。
我想创建一个 jar 并与其他配置文件一起放入一个 zip 文件中 这对我有用
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>build-jar-with_dep1</id>
<phase>package</phase>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>${buildversion}</finalName>
<finalName>finalname</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<goals>
<goal>assembly</goal>
</goals>
</execution>
<execution>
<id>build_zip1</id>
<phase>package</phase>
<configuration>
<descriptor>src/assembly/bin.xml</descriptor>
<finalName>${buildversion}</finalName>
<finalName>finalname</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>