【问题标题】:How to invoke the same maven build twice in one call如何在一次调用中调用相同的 Maven 构建两次
【发布时间】:2011-11-06 13:48:36
【问题描述】:

是否可以使用不同的配置参数多次调用同一个 maven 构建?

我有一个使用 rpm-maven-plugin 创建多个 RPM 的 maven 构建。我向它传递了一个变量 (environment),它指定了 RPM 的目标环境:开发、登台或生产。

要为所有环境创建所有 RPM,我调用了 mvn package -Denvironment=... 3 次;我想简化一下。如果我可以调用一次mvn package,那就太好了,它反过来会为所有环境构建三个 RPM。

你觉得有什么办法吗?

编辑 1

到目前为止(基于dm3's great answer),我可以在一个构建中创建三个具有相同属性的独立 RPM。现在的问题是能够为每次执行更改environment 属性。有什么建议吗?

<project>
  <properties>
    <!-- Default Environment -->
    <environment>development</environment>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>rpm-maven-plugin</artifactId>
        <version>2.1-alpha-1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <id>package-development</id>
            <goals><goal>rpm</goal></goals>
          </execution>

          <execution>
            <phase>package</phase>
            <id>package-staging</id>
            <goals><goal>rpm</goal></goals>
          </execution>

          <execution>
            <phase>package</phase>
            <id>package-production</id>
            <goals><goal>rpm</goal></goals>
          </execution>
        </executions>
      </plugin>
    </plugins>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>rpm-maven-plugin</artifactId>
          <version>2.1-alpha-1</version>
          <extensions>true</extensions>

          <configuration>
          ... VERY LONG CONFIG ...
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

【问题讨论】:

    标签: maven


    【解决方案1】:

    我相信在一次 maven 执行期间实现这一目标的唯一方法是将插件的多个执行(具有不同配置)绑定到生命周期阶段,如下所示:

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>test</phase>
                        <id>test-1</id>
                        <configuration>
                            ...
                        </configuration>
                        <goals><goal>test</goal></goals>
                    </execution>
                    <execution>
                        <phase>test</phase>
                        <id>test-2</id>
                        <configuration>
                            ...
                        </configuration>
                        <goals><goal>test</goal></goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        ...
    </build>
    

    您可以将此配置附加到由一个属性触发的某些配置文件(例如由mvn package -Denvironment=all)。

    【讨论】:

    • 上面的例子展示了如何使用两种不同的配置两次运行 Maven Surefire 插件。这是在两个不同的执行中定义的。您可以对任何其他插件执行相同的操作。
    • 太棒了!这非常接近我想要的。我现在唯一的问题是我的 部分有两页长。我不能只克隆它三遍。有没有什么办法可以指定一个配置,然后分三个阶段用不同的参数执行?
    • 我知道,这已经很老了。评论分享我所知道的,以便对其他人有所帮助。在父 pom 中的插件级别(不在任何执行中)使用 一次,如果需要,您可以使用 combine.children 属性覆盖特定执行的某些配置部分。
    猜你喜欢
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    相关资源
    最近更新 更多