对不知道这一点感到厌倦。 “报告”不是行家生命周期。我们如何告诉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
命令会失败。
答案 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>