在 gradle (3.3) 中查找 jacoco 代理 jar 的位置

Finding location of jacoco agent jar in gradle (3.3)

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

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

根据 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

如果有帮助请告诉我。

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