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

如何让子项目依赖另一个子项目的intTest源码集?

问题

希望在subproject2中复用subproject1的intTest测试类以避免代码重复,现有项目结构如下:

.
├── project
├── subproject1
│   ├── main
│   │   └──...
│   ├── intTest
│   │   └──...
│   └── build.gradle
├── subproject2
│   ├── main
│   │   └──...
│   ├── intTest
│   │   └──...
│   └── build.gradle
└── settings.gradle

subproject2当前的build.gradle配置如下:

sourceSets {
    intTest {
        scala {
            srcDirs("intTest/scala")
        }
        resources {
            srcDirs("intTest/resources")
        }
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

dependencies {
    implementation project(":subproject1")
    // 其他依赖...
}

目前subproject2只能访问subproject1的main源码集类,无法访问intTest源码集,需配置使其能够依赖subproject1的intTest源码集。

解决方案

要实现跨子项目复用测试类,需分两步配置:

1. 在subproject1中暴露intTest源码集的输出

Gradle默认不会对外暴露测试源码集的产物,因此需要在subproject1的build.gradle中创建自定义配置,将intTest的编译输出和资源对外暴露:

// subproject1/build.gradle
configurations {
    // 创建供外部依赖的配置
    intTestOutput
}

// 将intTest源码集的编译类和资源关联到自定义配置
configurations.intTestOutput.extendsFrom sourceSets.intTest.output

如果需要更精细化的属性控制,也可以用以下配置:

// subproject1/build.gradle
sourceSets {
    intTest {
        // 保留原有intTest配置
    }
}

configurations {
    intTestImplementation.extendsFrom implementation
    intTestRuntimeOnly.extendsFrom runtimeOnly

    intTestOutput {
        canBeResolved = false
        canBeConsumed = true
        attributes {
            attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.LIBRARY))
            attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, LibraryElements.CLASSES))
            attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, Bundling.EXTERNAL))
        }
        outgoing.artifact(sourceSets.intTest.output.classesDirs)
        outgoing.artifact(sourceSets.intTest.output.resourcesDir)
    }
}

2. 在subproject2中添加对subproject1 intTest的依赖

修改subproject2的build.gradle,为intTest源码集添加对subproject1自定义配置的依赖:

// subproject2/build.gradle
dependencies {
    implementation project(":subproject1")
    // 让subproject2的intTest依赖subproject1的intTest输出
    intTestImplementation project(path: ":subproject1", configuration: "intTestOutput")
}

配置完成后,subproject2的intTest源码集即可访问subproject1 intTest中的测试类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:37:18