【问题标题】:How do you force maven to execute antrun:run task after all the package tasks in a POM with child modules?在带有子模块的 POM 中的所有打包任务之后,如何强制 maven 执行 antrun:run 任务?
【发布时间】:2011-03-23 11:30:35
【问题描述】:

我有一个带有一堆子模块的父 POM。 在所有孩子都执行了 package 任务之后,我想运行一个 antrun:run 任务(我正在使用 Ant 来打包我的应用程序,因为我放弃了弄清楚如何让程序集正常工作)。

我需要让 antrun 任务在所有子节点之后执行 - 但我无法将它与 package 阶段相关联,因为父节点在子节点之前被“打包”,并且之后我需要 ant 运行。

有没有办法在一个命令中做到这一点?

当然,简单的解决方法是运行 2 个 maven 命令:

mvn package; mvn antrun:run

但如果可能的话,我想一次性完成

mvn package antrun:run

产生错误的行为 - 它在子项目的 package 阶段之前运行 antrun:run。

理想情况下,我可以只输入

mvn package

并在所有子节点上运行 package 阶段,然后在父节点上运行 antrun:run

【问题讨论】:

    标签: maven-2


    【解决方案1】:

    我需要在所有孩子之后执行 antrun 任务 - 但我不能将它与包阶段相关联,因为父母在孩子之前被“打包”,我需要 ant 之后运行。

    创建另一个依赖于所有子级的模块(这样它将成为反应堆构建期间的最后一个项目),并将您的 antrun 内容绑定到此模块中的package。然后从根项目运行mvn package

    【讨论】:

    • 天才!我想这不是最专业的方法,但它确实有效。有趣的是,我只是将我的新 packager 模块放在模块列表的末尾,我什至不必依赖任何东西——它就可以工作了。谢谢你的建议。
    • @toli:不客气。但我强烈建议明确声明依赖关系,以便以可靠的方式计算构建顺序。它目前“偶然”工作。
    • 是的。例如,如果您运行“mvn package -T 4”来启用并行构建(实验功能),它可能会失败,因为某些依赖项将不可用。
    • 这很棒,没有 google-copy-rename、ant-run、maven-resource 插件可以帮助我,这是我设法做我想做的事情的唯一方法:将standalone.xml 交换给开发人员运行集成测试时的版本
    【解决方案2】:

    <inherited>false</inherited> 
    

    在您的插件定义中:

    <plugin>
    <artifactId>maven-antrun-plugin</artifactId>    
               <inherited>false</inherited>
                  <executions>
                     <execution>
                       <phase>compile</phase>
                       <configuration>
    
                         <tasks>
                           <ant antfile="buildall.xml">
    
                           </ant>
                        </tasks>
                     </configuration>
                     <goals>
                        <goal>run</goal>
                    </goals>
                  </execution>
               </executions>
           </plugin>
    

    【讨论】:

    • 我认为它根本无法回答这个问题。 Inherited(false) 只是告诉该插件不能为当前插件的孩子执行
    【解决方案3】:

    首先您必须为 antrun 插件指定 execution。这将自动运行该插件。

    然后你必须在 antrun 插件 之前推动 maven 运行 package plugin。 您可以在 antrun 插件 设置之前放置 package plugin 设置。

    设置示例:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
            <phase> package </phase>
            <configuration>
              <tasks>
    
                <!--
                  Place any Ant task here. You can add anything
                  you can add between <target> and </target> in a
                  build.xml.
                -->
    
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    

    【讨论】:

    • 我确实在我的 POM 中有你上面的设置,不太清楚你的意思:然后你必须在 antrun 插件之前推动 maven 运行包插件。当您在 antrun 插件设置之前放置包插件设置时,您可以这样做。 我没有包插件设置...那么我如何推动它更早?
    • @toli:您不能将任何东西“推送”到更早,默认绑定(您不能“取消绑定”)将始终运行 before,句号。而且没有包插件
    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2016-07-28
    • 2020-02-20
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多