如何让子项目依赖另一个子项目的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
相关产品推荐
相关产品推荐

