有点厌倦不知道这一点。 “报告”不是 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
我收到此错误:
[ERROR] No plugin found for prefix 'org.jacoco.jacoco-maven-plugin' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/home/oleg/.m2/repository), central (https://repo.maven.apache.org/maven2)] -> [Help 1]
当我运行这个时:
mvn clean prepare-package
然后我直接得到一个输出,正如我所希望的:
target/site/jacoco
但我不明白为什么 mvn jacoco-maven-plugin:report
命令将失败。
最佳答案
对于理论:
Maven 有目标、阶段和生命周期。
生命周期由一系列阶段组成。每个阶段将执行一些附加目标。目标是将要执行的实际代码。
当你告诉 Maven 执行一个阶段时,它将运行从开始到该阶段的生命周期。当你告诉 Maven 执行一个目标时,它只会运行该目标。目标和阶段可以轻松区分,因为目标名称中包含 :
。
在第一个代码段中,您将目标report
附加到了prepare-package
阶段,因此如果您调用mvn prepare-package
,它将运行code> 或任何后续阶段 mvn install
。
如果 POM(或父 POM,或 Maven super POM)中已定义插件,则可以使用 mvn jacoco-maven-plugin:report
在命令行上调用它。否则,您需要采用 mvn groupId:artifactId:version:goal
形式的完全限定名称。
关于java - 当 Maven 目标不是阶段/生命周期的一部分时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54977097/