Jacoco Maven 插件 - 生命周期配置未涵盖插件执行
Posted
技术标签:
【中文标题】Jacoco Maven 插件 - 生命周期配置未涵盖插件执行【英文标题】:Jacoco Maven Plugin - Plugin execution not covered by lifecycle configuration 【发布时间】:2013-01-28 10:17:37 【问题描述】:我是 Maven 新手,想使用 Jacoco Maven 插件来构建我的项目。
我已经建立了一个示例项目,其中 TestNG 是唯一的依赖项。
这里是 pom.xml 的一部分:
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.2.201302030002</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>
</plugins>
</build>
我得到这个错误:
生命周期配置未涵盖插件执行:org.jacoco:jacoco-maven- plugin:0.6.2.201302030002:prepare-agent(执行:默认,阶段:初始化)
我做错了什么? 干杯
【问题讨论】:
【参考方案1】:你可以忽略插件目标,在你的 pom.xml 中添加这样的东西
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only.
It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<versionRange>[0.5,)
</versionRange>
<goals>
<goal>prepare-agent</goal>
</goals>
</pluginExecutionFilter>
<action>
<!-- m2e doesn't know what to do with jacoco,
let's ignore it or annoying error markers appear
see http://wiki.eclipse.org/M2E_plugin_execution_not_covered
-->
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
【讨论】:
在由于这与 Eclipse Maven 插件有关,因此也可以在 Eclipse 的首选项中进行本地设置。将配置从项目的 pom 文件中移出有助于代码简单干净,没有 IDE 细节。
转到 Eclipse --> 首选项 --> Maven --> 生命周期映射。添加lifecycle-mapping-metadata.xml
如下:
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<versionRange>[0.5,)</versionRange>
<goals>
<goal>prepare-agent</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
重新加载生命周期映射文件,然后Maven
--> Update Project
【讨论】:
【参考方案3】:Eclipse 现在提供了一个快速修复来禁用警告并将其保存在用户首选项中(在 Eclipse --> Preferences --> Maven --> Lifecycle Mappings lifecycle-mapping-metadata.xml 中,如 @iker-aguayo 所述)因此您不必手动创建或编辑文件。这在您无法更新 pom 的情况下很有用(例如使用无法提交的开源项目。)
【讨论】:
【参考方案4】:我最终选择忽略插件并使用 CLI mvn 命令代替代码覆盖测试。
在您的 Eclipse IDE 中,右键单击红色标记的警告 jacoco-maven-插件。您应该在弹出窗口中选择三个选项来修复警告,选择忽略警告,这将导致您的 pom.xml 中自动生成一个以一行 cmets 开头的部分,
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
在命令行中,在每次签入之前运行 mvn 命令,这应该会触发覆盖率的测试目标,
$mvn clean package
【讨论】:
这没有回答问题。这个问题专门关于插件错误。使用命令行并不能解决错误 @Pat 它确实回答了这个问题。这个答案解释了一种忽略警告的方法,请仔细阅读。如果您按照此处的说明进行操作,您的 POM 文件将从代码部分中的注释行开始更新,以忽略警告。 CLI 只是替代方案。 我仍然认为忽略 Eclipse 中的插件并不能解决问题,它只是一种解决方法。在 Eclipse 中使用 maven 插件的全部意义在于,我不必去命令行输入那些“mvn”命令。此解决方法不能解决实际错误。【参考方案5】:这个问题是 Eclipse 特有的,如outlined on the M2E wiki。抱歉,我不能提供更多帮助,因为我不使用 Eclipse。
【讨论】:
以上是关于Jacoco Maven 插件 - 生命周期配置未涵盖插件执行的主要内容,如果未能解决你的问题,请参考以下文章
生命周期配置未涵盖插件执行:com.jayway.maven.plugins.android.generation2
生命周期配置未涵盖插件执行:org.apache.maven.plugins:maven-toolchains-plugin:1.1:toolchain