当前位置: 首页 > 知识库问答 >
问题:

Maven surefire插件未使用Jacoco提供的argLine属性

谢泽语
2023-03-14

这个问题更侧重于理解maven的生命周期,而不是解决一个真正的问题。

我们有一个包含几个maven模块的项目。Jacoco和Surefire插件都是在父pom中配置的。xml格式如下:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.0</version>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
            <configuration>
                <destFile>${project.build.directory}/jacoco.exec</destFile>
                <propertyName>surefireArgLine</propertyName>
            </configuration>
        </execution>
        <execution>
            <id>default-report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
            <configuration>
                <dataFile>${project.build.directory}/jacoco.exec</dataFile>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <configuration>
            <argLine>${surefireArgLine}</argLine>
    </configuration>
</plugin>

这种配置运行良好,jacoco。执行常见目标时,会在目标目录上创建exec文件,例如:

mvn clean install

mvn test

但如果我们执行以下命令,jacoco。未创建exec文件:

mvn clean install -DskipTests
#other actions here...
mvn jacoco:prepare-agent surefire:test

通过使用-X选项分析日志,surefire插件表明它将按照预期使用argLine属性:

<argLine>${surefireArgLine}</argLine>

目标jococo:prepare代理正确生成此变量的值:

argLine set to -javaagent:s:\\m2_repo\\org\\jacoco\\org.jacoco.agent\\0.8.0\\org.jacoco.agent-0.8.0-runtime.jar=destfile=S:\\sources\\sofia2-s4c\\config\\services\\target\\jacoco.exec

但是当surefire: test执行时,它不使用argLine属性:

[DEBUG]   (s) additionalClasspathElements = []
argLine SHOULD BE HERE!!!!
[DEBUG]   (s) basedir = S:\sources\sofia2-s4c\config\services

我们已经解决了这个问题:

mvn clean install -DskipTests
#other actions here...
mvn test

由于mvn测试检测到编译类中没有任何更改,因此这是有效的。但我想理解为什么第一种方法不起作用。

共有1个答案

栾烨华
2023-03-14

问题在于

来自https://github.com/jacoco/jacoco/issues/964:

  • 定义用户属性

另见https://stackoverflow.com/a/23605812/510583

 类似资料:
  • 我有三个实体。(在本例中,我使用xxx作为占位符) 我已经用 然而,我能够做到: 只适用于它们各自存储库中的一个实体。当我试图为另外两个实体这样做时,我遇到了这个问题: “派生查询无效!找不到类型xxx的属性id!” 我能够运行它并得到正确的结果。但是为什么我得到了两个实体的这个错误,而不是另一个? 我以完全相同的方式设置实体和它们的存储库。唯一的区别是,在存储库不返回任何错误的实体中,我将该实体

  • 我有一个Kubernetes 1.10.0,Docker 17.03.2-CE和Jenkins 2.107.1运行在Ubuntu 17.04 VM上,Jenkins安装了Kubernetes插件1.5。我有另外4个Ubuntu虚拟机成功地设置为集群中的节点,包括未受污染的master。我可以直接部署基于Nginx的服务,并且可以不受限制地访问仪表板。所以,Kubernetes本身似乎已经足够快乐了

  • 问题内容: 我正在尝试使用Echo提供多个文件,但并非每次都可以。api代码如下所示: 确切地说,它确实适用于最初的文件获取,但是随后对于任何后续调用(无论是文件获取还是更多的“经典”调用)都会失败。对于每个浏览器,错误消息都有所不同: 在Chrome中: 语法错误:无法在’XMLHttpRequest’上执行’setRequestHeader’:’Bearer {the_entire_conte

  • 我正在使用SpringDoc1.4和Spring-Boot2.3,在OperationCustomizer类中,我需要从应用程序属性文件中读取值。但每次都将字段初始化为。规格如下 应用程序.属性 OperationCustomizer类

  • 我想从JaCoCo中排除一些类别,但排除似乎不起作用。 例如,我想排除所有以Dao结尾的Java类(例如com.company.emplyedao)。 我已经尝试了以下代码,但当我将其推送到sonar/use JacoTestReport时,它仍然显示出来。 我将它与Android结合使用。发生了什么事?

  • 以下是我的POM中的一些相关片段: 版本:Maven 3.0.4、Tomcat Maven Plugin2.1、Jacoco 0.6.2.201302030002、Java7