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

如何将测试固件打包进Gradle子模块发布JAR供外部项目使用?

解决Gradle子模块测试固件无法发布的问题

你的问题根源确实在于自定义的发布配置——默认的kotlin组件仅包含主代码源集,不会自动纳入java-test-fixtures插件生成的测试固件代码。下面提供两种解决方案:

方案1:发布单独的测试固件构件(推荐,符合Gradle规范)

这种方式会生成一个带test-fixtures分类器的独立JAR,外部项目可以通过标准的testFixtures依赖配置引用,不会污染主构件:

修改你subprojects中的发布配置,在现有MavenPublication中添加测试固件的JAR构件:

subprojects {
    // ... 其他原有配置

    publishing {
        publications {
            create<MavenPublication>(project.name) {
                version = projectVersion
                artifactId = tasks.jar.get().archiveBaseName.get()
                groupId = "${projectGroup}.${rootProject.name}"

                from(components["kotlin"])
                
                // 添加测试固件JAR作为额外构件
                artifact(tasks.testFixturesJar.get()) {
                    classifier = "test-fixtures"
                }
            }
        }
    }
}

发布后,外部项目可以这样引用测试固件:

dependencies {
    testImplementation testFixtures(project(":your-module-name"))
}

方案2:将测试固件合并到主JAR(不推荐)

如果确实需要把测试固件代码打包进主JAR(不建议,会混淆生产代码和测试代码边界),可以修改jar任务,纳入测试固件的编译输出:

subprojects {
    tasks {
        getByName<Jar>("jar") {
            enabled = true
            archiveClassifier.set("")
            // 加入测试固件的编译产物
            from(sourceSets.testFixtures.get().output)
        }
    }

    // ... 其他原有配置
}

关键说明

  • java-test-fixtures插件会自动创建testFixturesJar任务和对应的源集,只要插件应用正确,该任务就会存在
  • 保持测试固件与主代码分离是Gradle的设计规范,方案1能避免依赖冲突和代码边界模糊问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:50:26