目錄
問題內容
解決方法
首頁 Java 使用自訂來源集的 Gradle 多模組建置:依賴模組的編譯類別路徑中缺少類

使用自訂來源集的 Gradle 多模組建置:依賴模組的編譯類別路徑中缺少類

Feb 11, 2024 pm 11:27 PM

php小編新一在這篇文章中將為大家介紹如何使用自訂來源集的Gradle多模組建置。在建置過程中,我們經常會遇到依賴模組的編譯類別路徑中缺少類別的問題。本文將詳細解釋這個問題的原因,並提供解決方案,以確保依賴模組的編譯類別路徑中包含所有需要的類別。透過本文的指導,你將能夠更好地理解並應用Gradle多模組建置中的自訂源集功能,提高專案的建置效率和可維護性。

問題內容

我目前正在為 openlineage spark 整合做出貢獻,這是一個完全使用 java 並使用 gradle (8.4) 建立的專案。這是一個多模組項目,其模組名稱為appsharedspark2spark3spark32spark33spark34spark35

問題: 我正在嘗試為 apache spark 的 scala 2.12 和 2.13 變體建立 shared 模組。所有模組(spark2spark35)都依賴 shared。我的目標是編譯像 spark35 這樣的模組來產生兩個版本:一個用於 scala 2.12,另一個用於 apache spark 的 scala 2.13 變體。這也需要使用相應的 spark 變體正確建構 shared 模組,以避免執行時錯誤。

採取的方法: 我使用java庫插件在spark33spark34spark35shared中引入了來源集scala213testscala213。這些來源集使用與 maintest 來源相同的來源。 apache spark 的 scala 2.12 變體的依賴項設定為預設值,並且我對 scala 2.13 來源集有附加聲明。這包括對 shared 模組的依賴。

遇到的問題: 當我從shared 專案請求scala213runtimeelements(甚至是scala213apielements 配置)時,編譯類別路徑不包含shared 模組中的已編譯類。但是,恢復到預設配置後,這些類別將出現在類別路徑中。

問題: 為什麼指定特定配置 (scala213runtimeelements) 會導致 shared 模組的編譯類別從我的其他模組的編譯類別路徑中遺失?如何解決此問題以確保 shared 模組的類別包含在 scala 2.12 和 2.13 版本的類別路徑中?

下面您將找到我的各種 build.gradle 檔案。

共享/build.gradle

sourcesets {
    scala213 {
        java.srcdir("src/main/java")
        resources.srcdir("src/main/resources")
    }

    testscala213 {
        compileclasspath += sourcesets.scala213.output
        runtimeclasspath += sourcesets.scala213.output

        java.srcdir("src/test/java")
        resources.srcdir("src/test/resources")
    }
}

configurations {
    scala213api
    
    scala213apielements {
        extendsfrom(scala213api)
        canberesolved = false
        canbeconsumed = true
    }
    
    scala213implementation.extendsfrom(scala213api)
    
    scala213runtimeelements {
        extendsfrom(scala213implementation, scala213runtimeonly)
        canberesolved = false
        canbeconsumed = true
    }
    
    scala213compileclasspath {
        extendsfrom(scala213compileonly, scala213implementation)
        canberesolved = true
    }

    scala213runtimeclasspath {
        extendsfrom(scala213implementation, scala213runtimeonly)
        canberesolved = true
    }
    
    testscala213implementation.extendsfrom(scala213implementation)
    testscala213runtimeonly.extendsfrom(scala213runtimeonly)

    testscala213compileclasspath {
        extendsfrom(testscala213compileonly, testscala213implementation)
        canberesolved = true
    }

    testscala213runtimeclasspath {
        extendsfrom(testscala213implementation, testscala213runtimeonly)
        canberesolved = true
    }
}
登入後複製

spark33/build.gradle:

#
sourceSets {
    scala213 {
        java.srcDir("src/main/java")
        resources.srcDir("src/main/resources")
    }

    testScala213 {
        compileClasspath += sourceSets.scala213.output
        runtimeClasspath += sourceSets.scala213.output

        java.srcDir("src/test/java")
        resources.srcDir("src/test/resources")
    }
}

dependencies {
    implementation(project(path: ":shared"))
    // others removed for brevity

    scala213Implementation(project(path: ":shared", configuration: "scala213RuntimeElements"))
    // others removed for brevity
}
登入後複製

解決方法

好的。我想到了。這是 RTFM 的案例。

具體來說,這部分手冊。我沒有將「變體」工件新增到 shared 專案中。因此,Gradle 不知道它應該消耗什麼。令人困惑的是,預設配置使用類,而變體則需要 JAR。

以上是使用自訂來源集的 Gradle 多模組建置:依賴模組的編譯類別路徑中缺少類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24