1. 程式人生 > >Grade重複依賴解決方案-compileOnly

Grade重複依賴解決方案-compileOnly

最受歡迎的Gradle功能之一剛剛到達了2.12版:支援宣告只編譯依賴關係。對於熟悉Maven的Java開發人員,只有編譯的依賴關係與Maven的provided範圍相似,只允許在編譯時使用非傳遞依賴關係。儘管Gradle War Plugin的使用者可以使用類似的功能,但現在可以使用Java Plugin為所有Java專案宣告編譯依賴關係。

僅編譯依賴關係解決了一些用例,包括:

在編譯時所需的依賴關係,但在執行時不需要,例如僅原始碼註解或註釋處理器;
在編譯時所需的依賴關係,但在執行時僅在使用某些功能時才需要,也稱為可選依賴項;
在編譯時需要其API,但其實現由消費庫,應用程式或執行時環境提供的依賴關係。
僅編譯依賴關係與常規compile依賴關係明顯不同。它們不包含在執行時類路徑中,它們是非傳遞性的,意味著它們不包括在依賴專案中。當使用Gradle專案依賴關係以及釋出到Maven或Ivy儲存庫時,這一點是正確的。在後一種情況下,只有從已釋出的元資料中省略編譯依賴關係。

作為我們對質量IDE支援的承諾的一部分,只有依賴編譯才能繼續使用Gradle的IDEA和Eclipse外掛。在IntelliJ IDEA中使用時,僅編譯依賴關係對映到IDEA自己的provided作用域。在Eclipse中,僅編譯依賴關係不會通過專案依賴關係匯出。

在Gradle模型中,我們認為測試是生產程式碼的“消費者”。考慮到這一點,只有編譯依賴關係不會被測試類路徑繼承。意圖是,像任何其他執行時環境一樣,測試應該以嘲笑或其他依賴的形式提供自己的實現。

宣告只編譯依賴關係很簡單 - 只需compileOnly為相應源集合的新配置分配依賴關係:

dependencies {
compileOnly ‘javax.servlet:servlet-api:2.5’
}
作為配置的結果compileOnly,compile配置不再代表所有編譯時依賴關係的完整畫面。當需要在構建指令碼或自定義外掛中引用編譯類路徑時,compileClasspath應使用相應的源集合的屬性。