請教gradle高手,有三個module app和lib(sync-lib及
ttt-lib),lib裡面又有用到第三方一些library,像Timber之
類的,但app裡面寫Unit test用到Timber,有客製寫
了一個task叫unitMocktest來執行unit test,但在執
行gradle unitMocktest的時候會找不到timber,錯誤訊息如下:
app:compileUnitMockTestJava
/home/project/app/src/unitMockTest/java/com/aaa/sync/ClassTestC.java:41: error:
OkHttpClient okHttpClient = new OkHttpClient();
^
symbol: class OkHttpClient
location: class ClassTestC
/home/project/app/src/unitMockTest/java/com/aaa/sync/ClassTestC.java:41: error:
OkHttpClient okHttpClient = new OkHttpClient();
^
symbol: class OkHttpClient
location: class ClassTestC
/home/project/app/src/unitMockTest/java/com/aaa/sync/ClassTestC.java:49: error
Timber.e("a");
^
symbol: variable Timber
location: class ClassTestC
Note: /project/app/src/unitMockTest/java/com/aaa/sync/ClassTestA.java uses
Note: Recompile with -Xlint:deprecation for details.
3 errors
:app:compileUnitMockTestJava FAILED
===============================
以下是app/build.gradle的設定
// Constants
def extra = rootProject.ext
def deps = extra.deps
buildscript {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath "io.realm:realm-gradle-plugin:3.4.0"
classpath 'me.tatarka:gradle-retrolambda:3.5.0'
classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
classpath 'com.jakewharton.timber:timber:4.5.1'
}
// Exclude the version that the android plugin depends on.
configurations.classpath.exclude group: 'com.android.tools.external.lombok'
}
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
android {
compileSdkVersion extra.compileSdkVersion
buildToolsVersion extra.buildToolsVersion
defaultConfig {
applicationId "com.abc.sync.test"
versionCode 1
versionName "1.0"
minSdkVersion extra.minSdkVersion
targetSdkVersion extra.targetSdkVersion
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
configurations.all {
resolutionStrategy {
force 'com.android.support:support-annotations:23.1.1'
}
}
configurations {
compile.exclude group: "org.apache.httpcomponents", module: "httpclient"
}
sourceSets {
String sharedTestDir = 'src/test/java'
test {
java.srcDir sharedTestDir
}
androidTest {
java.srcDir sharedTestDir
}
}
lintOptions {
abortOnError false
}
buildToolsVersion '25.0.0'
}
sourceSets {
main {
java {
srcDir 'src/test/java'
}
}
test {
java {
srcDir 'src/test/java'
}
compileClasspath += sourceSets.main.runtimeClasspath
}
unitMockTest {
java.srcDir file('src/unitMockTest/java')
java.srcDir file('../ttt-lib/src/main/java')
java.srcDir file('../sync-lib/src/main/java')
}
}
configurations {
unitMockTestCompile.extendsFrom testCompile
unitMockTestRuntime.extendsFrom testRuntime
}
task unitMockTest(type: Test) {
println 'Start unit test'
testClassesDir = sourceSets.unitMockTest.output.classesDir
classpath = sourceSets.unitMockTest.runtimeClasspath
useJUnit {
includeCategories 'com.wdc.sync.UnitTests'
excludeCategories 'com.wdc.sync.IntegrationTests'
}
}
dependencies {
compile project(path:':sync-lib' ,configuration: "compile")
compile project(path:':ttt-lib',configuration: "compile")
testCompile project(path: ':sync-lib' ,configuration: "compile")
testCompile project(path: ':ttt-lib',configuration: "compile")
testRuntime project(path: ':ttt-lib',configuration: "compile")
testCompile deps.timber
testCompile deps.okhttp
// Logging
// compile deps.timber
testCompile deps.slf4jApi
testCompile deps.slf4jSimple
// Dagger
compile deps.dagger
apt deps.daggerCompiler
testApt deps.daggerCompiler
provided deps.jsr250Api
androidTestApt deps.daggerCompiler
androidTestCompile(deps.espressoCore, {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.google.code.findbugs'
})
compile deps.androidPriorityJobqueue
compile deps.playServicesGcm
compile deps.supportAnnotations
// main APK
// RxJava 2
testCompile deps.rxjava2
testCompile deps.rxjava1
// Java tests
testCompile deps.junit
testCompile deps.mockitoCore
// Android tests
androidTestCompile deps.mockitoCore
androidTestCompile deps.dexmakerMockito
androidTestCompile deps.supportAnnotations
// test APK
androidTestCompile deps.supportTestRunner
androidTestCompile deps.supportTestRules
unitMockTestRuntime project(path: ':ttt-lib')
unitMockTestCompile project(':sync-lib')
unitMockTestCompile project(':ttt-lib')
unitMockTestCompile deps.rxjava2
unitMockTestCompile deps.rxjava1
unitMockTestCompile deps.mockitoCore
unitMockTestCompile deps.dexmakerMockito
}
有人知道為何build會找不到第三方package嗎?感謝指教