如何使用不同的属性执行两次maven插件

Ste*_*hen 16 pom.xml maven-3 maven

我想从一个maven pom构建,运行同一个插件的两个连续执行,在同一阶段只有一个属性不同,这将导致创建两个不同的存档.由于配置相当复杂,我宁愿不复制它只是为了改变一个值,这会造成维护噩梦.如果以某种方式可以<executions>在插件配置的部分中定义这样的属性,我可以避免这种头痛.

问题:这可能吗?如果可以的话怎么样?

更新:两个答案提到使用多个执行,其中一个提到您可以在每次执行中使用单独的配置.但鉴于我的大多数配置在两次执行之间是不变的,我可以在插件级别上有一个配置,并且每个执行中的配置部分对于不同的部分也是如此吗?

A_D*_*teo 17

给定简单的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>
Run Code Online (Sandbox Code Playgroud)

<includePom>true</includePom>在这种情况下,配置条目将与每个执行的自定义配置合并,并因此将通用配置集中为插件通用配置.

有关不同配置级别的更多详细信息,您可以在此处查看官方Maven文档,特别是"配置编译以运行两次"示例.更多详细信息也可以在官方POM文档中找到,这里是插件部分.


Aug*_*sto 5

您需要创建不同的执行(仍然绑定到同一阶段)

为了避免重复配置,您可以将其放在元素<configuration>外部<execution>,然后在两次执行中,仅定义不同的属性。

取自 Maven文档

<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>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。是的,我看到了这个文档,但我不明白其中“选项”的意义是什么。它们是如何使用的?该示例并未表明这一点。属性有名称和值,但选项似乎没有。 (2认同)