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

如何使用Gradle在JVM项目的Release版本中排除依赖?

JVM项目中仅保留调试类库在Debug版本的方案

在JVM项目(纯Java/Kotlin)中,虽然不像Android项目那样默认提供debugImplementation这类配置,但可以通过Gradle自定义配置和构建变体来实现相同效果,核心思路是区分Debug和Release的依赖集与编译输出。

方法一:自定义Debug/Release专属依赖配置(推荐)

通过Gradle的配置扩展,手动创建对应构建类型的依赖配置,并关联到对应的源码集:

Groovy DSL(build.gradle)

plugins {
    id 'java'
}

// 定义Debug和Release专属配置,继承自通用的implementation
configurations {
    debugImplementation.extendsFrom implementation
    releaseImplementation.extendsFrom implementation
}

dependencies {
    // 仅Debug版本引入调试类库
    debugImplementation 'com.your.debug:library:1.0.0'
    // 通用业务依赖仍用implementation
    implementation 'com.your.common:library:2.0.0'
}

sourceSets {
    debug {
        // 关联Debug源码目录(可选,若有Debug专属代码)
        java.srcDir 'src/debug/java'
        resources.srcDir 'src/debug/resources'
        // 让Debug编译时包含debugImplementation的依赖
        compileClasspath += configurations.debugImplementation
        runtimeClasspath += configurations.debugImplementation
    }
    release {
        java.srcDir 'src/release/java'
        resources.srcDir 'src/release/resources'
        // Release编译排除Debug依赖
        compileClasspath += configurations.releaseImplementation
        runtimeClasspath += configurations.releaseImplementation
        compileClasspath -= configurations.debugImplementation
    }
}

// 配置Jar任务,默认打包Release版本的输出
tasks.jar {
    from sourceSets.release.output
}

// 可选:创建Debug专属的Jar任务
task debugJar(type: Jar) {
    from sourceSets.debug.output
    archiveClassifier = 'debug'
}

Kotlin DSL(build.gradle.kts)

plugins {
    java
}

// 自定义Debug和Release配置
val debugImplementation by configurations.creating {
    extendsFrom(configurations.implementation.get())
}
val releaseImplementation by configurations.creating {
    extendsFrom(configurations.implementation.get())
}

dependencies {
    debugImplementation("com.your.debug:library:1.0.0")
    implementation("com.your.common:library:2.0.0")
}

sourceSets {
    create("debug") {
        java.srcDir("src/debug/java")
        resources.srcDir("src/debug/resources")
        compileClasspath += debugImplementation
        runtimeClasspath += debugImplementation
    }
    create("release") {
        java.srcDir("src/release/java")
        resources.srcDir("src/release/resources")
        compileClasspath += releaseImplementation
        runtimeClasspath += releaseImplementation
        compileClasspath -= debugImplementation
    }
}

tasks.named<Jar>("jar") {
    from(sourceSets["release"].output)
}

// 可选:Debug专属Jar任务
tasks.register<Jar>("debugJar") {
    from(sourceSets["debug"].output)
    archiveClassifier.set("debug")
}

方法二:通过项目属性动态控制依赖

如果不需要复杂的构建变体,也可以通过Gradle项目属性来动态判断是否引入调试类库:

Groovy DSL

dependencies {
    // 当构建时传入-Pdebug参数,才引入调试类库
    if (project.hasProperty("debug")) {
        implementation 'com.your.debug:library:1.0.0'
    }
    implementation 'com.your.common:library:2.0.0'
}

构建Debug版本时执行:

./gradlew build -Pdebug

普通构建(Release)直接执行./gradlew build即可,不会包含调试类库。

注意点

  • 若有Debug专属的业务代码,建议放在src/debug/java目录下,避免Release编译时出现未引用的调试类错误。
  • 自定义配置时需确保releaseImplementation不包含任何调试相关依赖,避免产物冗余。

内容的提问来源于stack exchange,提问作者AmirHossein Abdolmotallebi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:55:21