【问题标题】:Execute one Maven plugin goal as the last最后执行一个 Maven 插件目标
【发布时间】:2017-02-22 10:42:05
【问题描述】:

我想在项目的每个 Maven 构建中运行一个 Maven 插件目标 (jacoco:dump),无论构建的阶段如何,它应该是最后执行的目标。

我要实现的一个想法是将 jacoco:dump 目标链接到编译阶段,以便在每次构建时执行它,但是不可能将转储作为最后阶段的最后一个目标执行。

执行顺序

validate -> compile -> (any other phase and plugin goal execution) -> jacoco:dump

所以如果我使用mvn verify 构建,jacoco:dump 可以在验证阶段之后执行;如果我使用mvn compile 构建,则可以在编译阶段等之后执行jacoco:dump

有没有办法用 Maven 解决这个问题?

谢谢

【问题讨论】:

    标签: maven


    【解决方案1】:

    一种(hacky)方法是每次都将阶段作为属性传递。比如:

     <execution>
        <id>jacoco</id>
        <phase>${phase}</phase>
        <goals>
          <goal>dump</goal>
        </goals>
      </execution>
    

    调用mvn compile -Dphase=compilemvn test -Dphase=test 等。可能不是最优雅的解决方案,但很容易实现。

    【讨论】:

    • 谢谢。如果我直接使用插件目标,你怎么看?喜欢mvn test jacoco:dump。如here 所述,执行顺序是命令行中给出的顺序,所以如果我在所有想要的阶段之后运行jacoco:dump,也许我有解决方案。你怎么看?
    • 是的,听起来更好!
    【解决方案2】:

    解决方案简单但有效。我们可以直接从命令行运行插件目标,而无需将其配置到项目 pom.xml 中。 正如official documentation 中所述,当从命令行运行多个目标时,它们会按照给定的顺序执行,所以我只需要将 jacoco 插件放在命令的末尾即可:

    mvn compile org.jacoco:jacoco-maven-plugin:0.7.7.201606060606:dump sonar:sonar
    

    上面的例子先编译,然后执行jacoco:dump,再执行sonar:sonar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2010-11-30
      • 2019-07-09
      • 2018-08-17
      相关资源
      最近更新 更多