Maven目标何时不属于阶段/生命周期?

时间:2019-03-04 05:21:50

标签: java maven

对不知道这一点感到厌倦。 “报告”不是行家生命周期。我们如何告诉Maven在特定生命周期内运行报告。如果“报告”不是生命周期或阶段,那么<goal>report</goal>的实际含义是什么?报告什么时候开始运行?我们如何直接/仅运行它?

         <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

烦恼,当我运行此命令时:

 mvn org.jacoco.jacoco-maven-plugin:report

或者这个:

 mvn jacoco-maven-plugin:report

我收到此错误:

  

[错误]在以下位置未找到前缀'org.jacoco.jacoco-maven-plugin'的插件   当前项目和插件组中   [org.apache.maven.plugins,org.codehaus.mojo]可从   存储库[本地(/home/oleg/.m2/存储库),中央   ({https://repo.maven.apache.org/maven2)]-> [帮助1]

运行此命令时:

mvn clean prepare-package

然后我直接希望得到输出:

target/site/jacoco

但是我不明白为什么mvn jacoco-maven-plugin:report命令会失败。

2 个答案:

答案 0 :(得分:3)

理论上:

Maven具有目标阶段生命周期

生命周期由一系列阶段组成。每个阶段将执行许多附加目标。目标是将要执行的实际代码。

当您告诉Maven执行一个阶段时,它将运行从开始到该阶段的生命周期。当您告诉Maven执行目标时,它只会运行该目标。目标和阶段很容易区分,因为目标名称中有:

在您的第一个代码段中,您将目标report附加到阶段prepare-package,因此,如果您调用mvn prepare-package或以后的任何阶段以mvn install,它将运行。 / p>

如果在POM(或父POM或Maven超级POM)中已经定义了插件,则可以在命令行上使用mvn jacoco-maven-plugin:report来调用它。否则,您需要使用mvn groupId:artifactId:version:goal格式的标准名称。

答案 1 :(得分:1)

报告是JaCoCo Maven插件中定义的目标。

请检查此内容。

https://www.eclemma.org/jacoco/trunk/doc/maven.html

在未明确选择报告的情况下将插件与maven-site-plugin一起使用可能会导致生成冗余的聚合报告。明确指定reportSets可以避免这种情况:

<project>
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <!-- select non-aggregate reports -->
              <report>report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
</project>