簡體   English   中英

從其父項目推斷 Gradle 子項目中的依賴項

[英]Infer dependencies in Gradle subproject from its parent project

我目前在我的 Gradle 項目中有 3 個子項目,結構如下:

Main Project
| 
-- Project A
-- Project B
-- Common Src

Project A 依賴於 Lib A 和 Common Src,Project B 依賴於 Lib B 和 Common Src。 Lib A 和 Lib B 包含相同類的不同實現。

我對 Common Src 項目的計划是容納所有實用程序類,這必然取決於 Lib A 和 Lib B。

有沒有辦法設置它,我的 gradle 項目應該是什么樣子?

我嘗試過的事情:

  1. 我試圖將 Common Src 作為子項目刪除,並將其包含在項目 A 和項目 B 的源集中。但是,IntelliJ 似乎將 Common Src 標記為項目 A 的源根,即使 build-through-gradle 有效,我無法讓 IntelliJ 認識到項目 B 在 Common Src 中也有根目錄。
  2. 將 Lib A 和 Lib B 都添加到 Common Src 的依賴項中,但顯然這不起作用。

的背景:

我創建了一個與 Forge(項目 A)和 Fabric(項目 B)modloader 兼容的 Minecraft mod。 我在兩個項目中都有實用程序類,它們具有相同的源代碼但需要編譯兩次,每次都有不同的依賴項。 我不想每次要更改 Utility 類中的某些內容時都必須編寫兩次代碼。

編輯:我找到了一種解決方法:

  1. Project AProject B中,在各自的build.gradle中添加一個任務,將源文件從Common Src復制到每個項目的構建目錄。
  2. 配置Project AProject BsourceSets以包含我們剛剛復制到的構建文件夾中的源文件
  3. Common Src配置為 gradle 子項目,並將Lib A (或Lib B )添加到Common Src的依賴項中(只是為了讓 IntelliJ 獲得一些上下文)

這可能是您正在尋找的:

在“共享”項目(/模塊)構建腳本中,對您希望子項目繼承的每個依賴項使用“ api ”而不是“實現”。 示例:(科特林 DSL)

dependencies {
    api("org.jetbrains.kotlinx", "kotlinx-coroutines-core", "1.6.4")
    ...
}

然后,像這樣使項目 A 和項目 B 從該共享項目“繼承”

dependencies {
    implementation(project(":shared")) // "shared" is your "utility" prject
}

暫無
暫無

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

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