2013-03-13 44 views
2

依賴管理我有以下gradle這個構建腳本與gradle這個

apply plugin: 'java' 

sourceSets { 
    test { 
     java { 
      srcDir 'tests' 
     } 
    } 
    main{ 
     java {srcDir 'web-schedule\\src'} 
    } 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 

    compile 'javax:javaee-api:6.0' 
    compile 'javax:javaee-web-api:6.0' 

    testRuntime 'org.jboss.arquillian:arquillian-bom:1.0.3.Final' 
    testRuntime 'org.jboss.arquillian.junit:arquillian-junit-container:1.0.3.Final' 
    testRuntime 'org.jboss.arquillian.container:arquillian-glassfish-remote-3.1:1.0.0.CR3' 
    testRuntime 'junit:junit:4.+' 
    testRuntime 'org.jboss.weld:weld-api:1.1.Final' 

} 

我試圖實現與gradle這個全自動的編譯和測試執行。 基本問題是庫依賴關係。對於編制項目本身沒有測試中,我只需要遵循庫

compile 'javax:javaee-api:6.0' 
compile 'javax:javaee-web-api:6.0' 

但對於測試編譯我還需要所有的休息。但是在測試編譯過程中,如果我擁有它,它會引發異常。我發現該解決方案從測試編譯和執行過程中排除它。現在我手動做。我想實現的是完全自動完成的。我需要做什麼。

+0

究竟是什麼問題?你現在在做什麼手動操作?一些'testRuntime'依賴關係可能應該使用'testCompile'來代替。請注意,Gradle目前不支持Maven BOM(如'arquillian-bom') - 您必須單獨列出依賴關係。 – 2013-03-13 13:23:25

+0

問題是編譯我需要除去前兩個除去所有的依賴關係,然後進行測試編譯和執行我需要刪除前兩個,但留下所有其餘的。我不想手動去做,我只是想正確地配置構建腳本,並且只需點擊一下即可完成。 – maxormo 2013-03-13 13:47:50

+0

謝謝關於BOM我會盡力刪除它。 – maxormo 2013-03-13 13:48:15

回答

2

我不明白爲什麼你必須刪除除編譯生產代碼的前兩個之外的所有依賴項,因爲testRuntime配置沒有涉及到那裏。不知道您是否必須刪除測試編譯的前兩個依賴關係,但您必須刪除它們才能執行測試。以下是我想嘗試:

sourceSets { 
    test { 
     runtimeClasspath -= configurations.compile 
     // additionally try this: 
     // compileClasspath -= configurations.compile 
    } 
} 
+0

我需要每次刪除它們中的一些,因爲 ''org.jboss.weld:weld-api:1.1.Final''和 ''javax:javaee-api:6.0' 'javax:javaee-web-api: 6.0'' 不兼容。 – maxormo 2013-03-13 14:36:16

+0

這並不能解釋爲什麼你必須刪除任何用於編譯生產代碼的東西。 – 2013-03-13 14:54:14

+0

現在我檢查了一些東西,發現所有的依賴不會互相干擾編譯,但是爲了運行。更確切地說,前兩個。但他們需要編譯。 @peter我也檢查你的建議,它不工作 – maxormo 2013-03-13 15:10:51

1

的JavaEE-API-6.0.jar是一個畸形的罐子,它沒有方法體,只有signatures.So它不可能在運行時使用它。因此,您可以從測試的類路徑中排除此特定的庫:

configurations { 
    testRuntime.exclude module: 'javaee-api' 
}