簡體   English   中英

Gradle 將根項目類路徑注入依賴項

[英]Gradle inject root project class path to dependencies

我正在構建一個庫,它具有單獨的入口點(如服務器、gui),具有不同的依賴關系。 每個入口點都在一個單獨的子項目中,有自己的依賴項。

在我開始構建的根項目中,我想選擇入口點,並且僅使用該依賴項進行構建。 那是有效的。

但是我想從庫入口點實例化根項目的一個類(例如 MainClass),並且我無法將根項目類路徑添加到依賴項。

根項目構建文件現在看起來像這樣:

dependencies{
    implementation project(':server')
}

在我看來,如果入口點項目依賴於核心 API 而不是相反,那么它會更容易理解和清晰。 你可以有這樣的項目結構:

settings.gradle
core/
  build.gradle
  src/
server/
  build.gradle
  src/
gui
  build.gradle
  src/

server 和 gui 項目 build.gradle 文件應該包含:

dependencies {
  implementation project(':core')
}

使用庫的項目可能依賴於服務器和/或 GUI 項目,並直接實例化必要的類(ServerEntry 或 GuiEntry)。

如果您希望能夠在不同的入口點實現之間切換而不更改使用入口點實例的項目中的代碼,我建議使用依賴項注入框架(Spring、Guice、Dagger)。 依賴注入有助於將配置(將接口綁定到類)與實際應用程序分開。

我用Composite build解決了我的問題。 我在settings.gradle添加了includeBuild '../path-to-lib' ,然后我用正確的包和類名為庫創建了一個子項目Project 在運行時它會拋出一個錯誤,開發人員應該創建這個類。 將所有子項目添加到同一組中也很重要:

allprojects{
    group = 'library-group'
}

在宿主項目中,我可以依賴庫:

dependencies{
    implementation module('library-group:suproject')
}

現在 Gradle 會按照文檔建議的路線自動覆蓋類,我終於可以將我的宿主項目注入到 lib 中,並將其作為一個整體進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM