editor php Xinyi akan memperkenalkan anda cara menggunakan pembinaan berbilang modul Gradle dengan set sumber tersuai dalam artikel ini. Semasa proses binaan, kami sering menghadapi masalah kehilangan kelas dalam laluan kelas terkumpul modul bergantung. Artikel ini akan menerangkan punca masalah ini secara terperinci dan menyediakan penyelesaian untuk memastikan semua kelas yang diperlukan disertakan dalam laluan kelas yang disusun bagi modul bergantung. Melalui panduan artikel ini, anda akan dapat memahami dengan lebih baik dan menggunakan fungsi set sumber tersuai dalam pembinaan berbilang modul Gradle, dan meningkatkan kecekapan pembinaan dan kebolehselenggaraan projek.
Saya sedang menyumbang kepada penyepaduan percikan garis terbuka, sebuah projek sepenuhnya dalam java dan dibina dengan gradle (8.4). Ini adalah projek berbilang modul dan modulnya dinamakan app
、shared
、spark2
、spark3
、spark32
、spark33
、spark34
和spark35
.
Soalan:
Saya cuba membina modul shared
模块。所有模块(spark2
到 spark35
)都依赖于 shared
。我的目标是编译像 spark35
这样的模块来生成两个版本:一个用于 scala 2.12,另一个用于 apache spark 的 scala 2.13 变体。这还需要使用相应的 spark 变体正确构建 shared
untuk scala 2.12 dan 2.13 varian apache spark untuk mengelakkan ralat masa jalan.
Kaedah yang diambil:
Saya menggunakan pemalam perpustakaan java dalam pergantungan modul spark33
、spark34
、spark35
和shared
中引入了源集scala213
和testscala213
。这些源集使用与 main
和 test
源相同的源。 apache spark 的 scala 2.12 变体的依赖项设置为默认值,并且我对 scala 2.13 源集有附加声明。这包括对 shared
.
Masalah yang dihadapi:
Apabila saya mendapat kelas yang disusun daripada modul shared
项目请求 scala213runtimeelements
(甚至是 scala213apielements
配置)时,编译类路径不包含 shared
. Walau bagaimanapun, selepas kembali kepada konfigurasi lalai, kelas ini akan hadir dalam classpath.
Soalan:
Mengapa menentukan konfigurasi tertentu (scala213runtimeelements
) 会导致 shared
模块的编译类从我的其他模块的编译类路径中丢失?如何解决此问题以确保 shared
modul yang kelasnya disertakan dalam laluan kelas untuk versi skala 2.12 dan 2.13?
Di bawah anda akan menemui pelbagai build.gradle
fail saya.
share/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 }
Baiklah. Saya memikirkannya. Ini adalah kes RTFM.
Secara khusus, bahagian manual ini. Saya tidak menambah artifak "varian" pada projek shared
. Oleh itu, Gradle tidak tahu apa yang harus dimakan. Mengelirukan, konfigurasi lalai menggunakan kelas, manakala varian memerlukan JAR.
Atas ialah kandungan terperinci Binaan berbilang modul Gradle dengan set sumber tersuai: kelas tiada daripada laluan kelas kompilasi modul bergantung. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!