在gradle中找到jacoco agent jar的位置(3.3)

时间:2017-07-19 18:44:07

标签: java gradle jacoco jacoco-maven-plugin

我正在尝试在应用程序服务器上进行测试覆盖率分析,并且不希望在单元测试和端到端测试之间手动管理jacoco版本。 有没有办法从gradle任务中获取代理的路径,我可以依靠gradle来保持插件和手动附件之间的jacoco代理版本一致。

最终目标是运行附加了jacoco代理的服务器,并在端到端测试期间收集测试覆盖率信息。

2 个答案:

答案 0 :(得分:2)

根据Gradle doc,jacoco关闭会配置toolVersion来控制jacocoagent版本。

jacoco {
    toolVersion = "0.7.6.201602180812"
}

以下gradle source code解析jacocoagent.jar

/**
 * Unzips the resolved {@code org.jacoco.agent.jar} to retrieve the {@code jacocoagent.jar}.
 *
 * @return a file pointing to the {@code jacocoagent.jar}
 */
public File getJar() {
    if (agentJar == null) {
        agentJar = project.zipTree(getAgentConf().getSingleFile()).filter(new Spec<File>() {
            @Override
            public boolean isSatisfiedBy(File file) {
                return file.getName().equals("jacocoagent.jar");
            }
        }).getSingleFile();
    }
    return agentJar;
}

事实上,如果您下载了jar(例如org.jacoco.agent-0.7.6.201602180812.jar)并将其解压缩,您会发现它位于顶层:

$ unzip org.jacoco.agent-0.7.6.201602180812.jar
Archive:  org.jacoco.agent-0.7.6.201602180812.jar
  inflating: META-INF/MANIFEST.MF    
  inflating: META-INF/MTNMINDS.SF    
  inflating: META-INF/MTNMINDS.RSA   
   creating: META-INF/maven/
   creating: META-INF/maven/org.jacoco/
   creating: META-INF/maven/org.jacoco/org.jacoco.agent/
  inflating: META-INF/maven/org.jacoco/org.jacoco.agent/pom.xml  
  inflating: META-INF/maven/org.jacoco/org.jacoco.agent/pom.properties  
   creating: org/
   creating: org/jacoco/
   creating: org/jacoco/agent/
  inflating: jacocoagent.jar         
  inflating: org/jacoco/agent/AgentJar.class  
  inflating: about.html

如果有帮助,请告诉我。

答案 1 :(得分:2)

您可以将代理作为依赖项。根据页面http://www.jacoco.org/jacoco/trunk/doc/repo.html:Maven坐标 - groupdIdorg.jacocoartifactIdorg.jacoco.agentclassifierruntime。这是打包到JAR中的相同工件,它提供对代理的访问作为资源(org.jacoco:org.jacoco.agent又名“API以获取代理的本地副本”)并且由Gradle JaCoCo插件使用。可以将版本指定为变量,以实现Gradle JaCoCo插件和依赖项之间的一致性。