You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle自定义插件运行时找不到jar包内resources下coco.gradle文件

问题根源

你使用new File("相对路径")读取文件时,默认读取的是运行Gradle命令的业务项目的工作目录下的文件,无法读取到插件jar包内的resources资源,需要通过类加载器读取插件classpath下的资源。

解决方案1:保留coco.gradle资源文件的写法

修改插件代码为如下逻辑,通过类加载器读取jar内的配置文件并应用:

package com.jink.test
import org.gradle.api.Plugin
import org.gradle.api.Project

class FileDiffPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        // 从插件jar的类路径加载coco.gradle
        URL configResource = this.class.getClassLoader().getResource("coco.gradle")
        if (configResource == null) {
            throw new RuntimeException("插件jar内缺失coco.gradle配置文件")
        }
        // 应用读取到的配置脚本
        project.apply from: configResource

        project.tasks.create('javaCoco') {
            doLast {
                println "Hello World"
            }
        }
    }
}

注意:你提供的coco.gradle存在语法错误,reports块的配置需要修正为:

apply plugin: "jacoco"
allprojects {
    jacoco {
        toolVersion = "0.8.2"
    }
    test {
        jacoco {
            destinationFile = file("$buildDir/../target/jacoco.exec")
        }
    }
    jacocotestReport {
        reports{
            xml.enabled true
            html.enabled true
        }
    }
}

解决方案2:无配置文件方案(更推荐)

直接把Jacoco的配置逻辑写进插件代码,不需要单独维护coco.gradle资源文件,封装性更好:

package com.jink.test
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.testing.jacoco.tasks.JacocoReport
import org.gradle.api.tasks.testing.Test

class FileDiffPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        // 自动应用Jacoco插件
        project.pluginManager.apply("jacoco")
        
        // 全局配置所有子项目的Jacoco参数
        project.allprojects { currentProj ->
            currentProj.jacoco {
                toolVersion = "0.8.2"
            }
            // 配置测试任务的Jacoco输出路径
            currentProj.tasks.withType(Test) { testTask ->
                testTask.jacoco {
                    destinationFile = currentProj.file("${currentProj.buildDir}/../target/jacoco.exec")
                }
            }
            // 配置Jacoco报告生成规则
            currentProj.tasks.withType(JacocoReport) { reportTask ->
                reportTask.reports {
                    xml.enabled = true
                    html.enabled = true
                }
            }
        }

        project.tasks.create('javaCoco') {
            doLast {
                println "Hello World,Jacoco配置已自动注入"
            }
        }
    }
}

修改后重新发布插件到本地Maven,业务项目引入后即可直接使用所有Jacoco能力,无需额外配置。

内容的提问来源于stack exchange,提问作者krishna chaitanya jinka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 19:57:00