2014-09-18 80 views
1

我有一個奇怪的場景,其中Gradle好像試圖編譯位於我設置爲依賴關係的jar文件內的「.java」文件。我做這樣的事情:Gradle在jar文件中編譯.java?

dependencies { 
    testCompile fileTree(dir: './libs', include: ['*JarResources/Java/*.jar']) 
    testCompile group: 'junit', name: 'junit', version: '4.11' 
} 

...我有一個相當大的jar依賴列表。當我嘗試運行我的測試時,它在編譯階段失敗,它無法找到堆放在jar文件中的Java文件的符號。這些jar依賴關係中的一部分打包時,其源代碼將放在相應的.class旁邊。我嘗試使用包含過濾器在我的源設置無濟於事。

sourceSets { 
    main { 
     java { 
      exclude 'com/mypkg/other/**' 
     } 
    } 
    test { 
     java { 
      include 'com/mypkg/test/**' 
     } 
    } 
} 

我可以使用它的gradle這個意識,恕不問題(我在這裏右擊單元測試和運行它們),因爲它是足夠聰明,構建依賴類路徑,而沒有經過運行的IntelliJ 13測試文件到Javac,但不知何故相同的build.gradle從命令行失敗。這是一個已知的問題,Gradle會自動將依賴關係傳遞給javac,因爲它在Jar文件中發現它們?

回答

2

您所看到的是Java編譯器的默認行爲(源路徑默認爲類路徑,源路徑上的文件被編譯)。一條出路是明確設置源路徑設置爲「無」:

tasks.withType(JavaCompile) { 
    options.compilerArgs += ["-sourcepath", "''"] 
} 

PS:不是所有的工具/集成開發環境可以應對罐的來源,所以它通常是更好地把它們放在一個單獨的源罐。

+0

謝謝!你用這個提示保存了我的培根!不幸的是我沒有能力改變依賴關係的結構。這是那些「當我得到它時就是這樣」情景。有一段時間我不會找到我的出路! – Cliff 2014-09-19 00:45:02