我有2个模块,模块A和模块B。模块B依赖于模块A,模块A通过使用api
配置与模块B共享依赖库。
在模块A内设置测试环境时,我还使用testApi
和androidTestApi
使用共享的测试库来制作模块B。但是,在运行gradle sync之后,我收到警告消息:WARNING: Configuration 'testApi' is obsolete and has been replaced with 'testImplementation'
。
阅读提供的link,并说other modules can't depend on androidTest, you get the following warning if you use the androidTestApi configuration
。因此,我必须在示例中在模块B中定义测试库,以跳过此警告。
我对此情况有疑问:
api
的常规依赖关系,却不应该依赖于测试另一个模块的依赖关系?非常感谢
答案 0 :(得分:4)
我这样做的方法是创建一个自定义配置。在您的情况下,在build.gradle
文件模块A中添加:
configurations {
yourTestDependencies.extendsFrom testImplementation
}
dependencies {
// example test dependency
testImplementation "junit:junit:4.12"
// .. other testImplementation dependencies here
}
然后在模块B的build.gradle
中添加:
dependencies {
testImplementation project(path: ':moduleA', configuration: 'yourTestDependencies')
}
以上内容将包含在模块A到模块B中声明的所有testImplementation
依赖项。
答案 1 :(得分:2)
这是Kotlin-DSL中的Chris Margonis(赞!)答案:
// "base" module/project
configurations {
create("testDependencies"){
extendsFrom(configurations.testImplementation.get())
}
}
dependencies {
// example test dependency
testImplementation "junit:junit:4.12"
// .. other testImplementation dependencies here
}
//another module
dependencies {
testImplementation(project(path = ":base", configuration = "testDependencies"))
}
答案 2 :(得分:0)
为了补充已接受的答案,请在您的基本模块 :core
中添加一个配置闭包:
// build.gradle (core module)
configurations {
testDependencies.extendsFrom testImplementation
testRuntimeOnlyDependencies.extendsFrom testRuntimeOnly
}
dependencies {
def junit5_version = "5.6.0"
// dependencies
testImplementation "org.junit.jupiter:junit-jupiter-api:$junit5_version"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit5_version"
testImplementation "org.junit.jupiter:junit-jupiter-params:$junit5_version"
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junit5_version"
}
然后在您的 feature
模块中添加:
dependencies {
implementation project(':core') {
testImplementation configurations.getByName('testDependencies').allDependencies
testRuntimeOnly configurations.getByName('testRuntimeOnlyDependencies').allDependencies
}
}
现在您的测试依赖项在模块之间共享。
注意:模块core
和feature
是虚构的,请相应替换。