上次我决定在我的 Java 项目 Maven 构建中用 JaCoCo 插件替换 Cobertura 插件。
其中之一是具有模块间依赖关系的多模块项目:
*-- pl.chilldev.commons
|-- commons-concurrent
|-- commons-daemon
`-- commons-exception
问题是 commons-daemon
依赖于 commons-exception
。
我按照以下方式配置了jacoco-maven-plugin
:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.1.201405082137</version>
<executions>
<execution>
<id>jacoco-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
一切正常,测试已运行,但 site
目标失败,并显示:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.3:site (default-site) on project commons: failed to get report for org.apache.maven.plugins:maven-javadoc-plugin: Failed to execute goal on project commons-daemon: Could not resolve dependencies for project pl.chilldev.commons:commons-daemon:jar:0.0.3-SNAPSHOT: Could not find artifact pl.chilldev.commons:commons-exception:jar:0.0.3-SNAPSHOT -> [Help 1]
没有jacoco-maven-plugin
,即使对于site
目标,一切也能正常工作。
最佳答案
设法让它发挥作用。问题是,默认情况下 prepare-agent
目标绑定(bind)到 initialize
阶段,这意味着一切都将使用 JaCoCo java 代理执行,该代理可能无法在计算之前解析类路径Maven(我只是假设,我不知道内部原理)。
添加:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.1.201405082137</version>
<executions>
<execution>
<phase>process-test-classes</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
已修复。
顺便说一句 - 也不需要将 report
目标添加到执行列表中,我认为将其添加到报告插件中更正确。
关于java - jacoco-maven-plugin 导致站点插件在多模块项目中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23927329/