2014-12-03 71 views
1

我有provided依賴項範圍配置如下。我的問題是,提供的依賴關係在運行時在測試中不可見。我如何配置這個以保持依賴關係provided但在測試類路徑中可用?使用Gradle添加提供的依賴項到測試類路徑

apply plugin: 'java' 

configurations { 
    provided 
} 

sourceSets { 
    main { 
     compileClasspath += configurations.provided 
    } 
} 

dependencies { 
    provided 'com.google.guava:guava:18.0' 
    provided 'org.apache.commons:commons-lang3:3.3.2' 

    // Tests 
    testCompile 'junit:junit:4.11' 
    testCompile 'org.assertj:assertj-core:1.7.0' 

    // Additional test compile dependencies 
    testCompile 'joda-time:joda-time:2.2' 
} 

一種解決方案是增加像testCompile範圍喬達時庫的依賴性,但我不想複製任何條目。我確信可以通過適當的配置來實現。

回答

3

固定在configurations的一條附加行。不知道這是否是最好的和適當的解決方案,但按預期工作。

configurations { 
    provided 
    testCompile.extendsFrom(provided) 
} 
3

兩種方法可以做到這一點。首先,testRuntime配置從provided延伸。

configurations { 
    provided 
    testRuntime.extendsFrom(provided) 
} 

其次,你可以在provided配置添加到您的test任務的類路徑。

test { 
    classpath += configurations.provided 
} 
+0

即使使用這兩種配置,我仍然無法運行測試。例如,使用提供的Joda時間,無論哪個配置,我都會得到'Gradle:error:package org.joda.time不存在' – tomrozb 2014-12-03 18:12:11

+0

這些是編譯還是運行時依賴關係。如果它是一個編譯依賴項,你將需要使用'sourceSets.test.compileClasspath + = configurations.provided'指定你在原始文章中所做的。 – 2014-12-04 01:22:49

+0

仍然無法使用。它編譯,但在運行時,我得到'java.lang.NoClassDefFoundError:org/joda/time/ReadableInstant'嘗試使用發佈在答案中的選項,唯一的變化是使用'testRuntime.extendsFrom(provided)',但仍然使用java崩潰。 lang.NoClassDefFoundError:junit/textui/ResultPrinter'任何想法? – tomrozb 2014-12-04 20:39:17