【问题标题】:Finding location of jacoco agent jar in gradle (3.3)在 gradle (3.3) 中查找 jacoco 代理 jar 的位置
【发布时间】:2017-12-25 04:53:04
【问题描述】:

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

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

【问题讨论】:

  • 你能附上你当前的 build.gradle 吗?
  • 唯一相关的部分是我正在使用 jacoco 插件。 apply plugin: "jacoco" 并且插件没有指明它保存 jar 文件的位置。
  • 我在回答中添加了一些想法,如果对您有帮助,请告诉我。

标签: java gradle jacoco jacoco-maven-plugin


【解决方案1】:

您可以将代理作为依赖项。根据页面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 插件和依赖项之间的一致性。

【讨论】:

  • 不是很理想,但总比在配置中猜测或维护2个版本号要好。我现在有一个用于插件和代理的版本。希望代理和插件保持版本同步。
【解决方案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

如果这有帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2018-07-01
    • 2011-08-24
    相关资源
    最近更新 更多