如何使用不同的属性

时间:2015-12-09 21:59:32

标签: maven maven-3 pom.xml

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

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

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

4 个答案:

答案 0 :(得分:16)

鉴于简单的Maven源插件配置(作为示例),您在其所有执行(在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,特别是示例&#34;配置编译以运行两次&#34;。有关详细信息,请参阅官方POM文档here,插件部分。

答案 1 :(得分:3)

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

为避免重复配置,您可以将<configuration>置于<execution>元素之外,然后在2次执行中,您只需定义不同的属性。

取自maven 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>

答案 2 :(得分:0)

您创建了两个&lt; execution&gt; &lt;插件&gt;中的元素宣言。每个&lt;执行&gt; element可以拥有它自己的&lt; configuration&gt;部分。

答案 3 :(得分:0)

我想用其他配置文件创建一个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>