我正在使用fileTree()
包含另一个项目中的一些本地构建的库:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
...
}
对于单元测试,我想使用自己的模拟类而不是这些jar。我该如何testImplementation
配置不使用那些jar文件,而是使用源层次结构之外的类似名称的类?
答案 0 :(得分:0)
默认为the testImplementation
configuration extends from the implementation
one,因此添加到implementation
的每个依赖项都将出现在testImplementation
中。
所以最好的选择是将这些特定的依赖项声明为不同的配置,我们将其称为extraDeps
,然后将其添加到compileClasspath
配置中:
configurations {
extraDeps
compileClasspath.extendsFrom(extraDeps)
}
dependencies {
extraDeps fileTree(dir: 'libs', include: ['*.jar'])
}
这为您提供以下优点:
implementation
答案 1 :(得分:0)
就我而言,我需要包括aar来实现,并用jar替换它以进行单元测试。 Gradle can't exclude jar files,所以我找到了不同的解决方案。
假设我在文件夹MyProject
中有一个Android项目。因此,必须有文件MyProject/build.gradle
和MyProject/app/build.gradle
。
我将<my-dependency>.aar
文件和<my-test-dependency>.jar
文件放入MyProject/app/libs
目录。然后,将该目录作为本地存储库添加到MyProject/build.gradle
文件中:
allprojects {
repositories {
...
flatDir {
dirs 'libs'
}
}
}
现在我可以按名称包括和排除我的aar:
configurations.testImplementation {
exclude module: '<my-dependency>'
}
dependencies {
implementation(name: '<my-dependency>', ext:'aar')
testImplementation(name: '<my-test-dependency>', ext:'jar')
// fileTree also should work, i.e.:
// testImplementation fileTree(dir: 'libs', include: ['*.jar'])
}