php 편집기 Xinyi는 이 기사에서 사용자 정의 소스 세트와 함께 Gradle 다중 모듈 구성을 사용하는 방법을 소개합니다. 빌드 프로세스 중에 종속 모듈의 컴파일된 클래스 경로에 클래스가 누락되는 문제가 자주 발생합니다. 이 기사에서는 이 문제의 원인을 자세히 설명하고 모든 필수 클래스가 종속 모듈의 컴파일된 클래스 경로에 포함되도록 하는 솔루션을 제공합니다. 이 글의 안내를 통해 Gradle 다중 모듈 구성에서 사용자 정의 소스 세트 기능을 더 잘 이해하고 적용할 수 있으며, 프로젝트의 구성 효율성과 유지 관리성을 향상시킬 수 있습니다.
저는 현재 완전히 Java로 작성되고 Gradle(8.4)로 구축된 프로젝트인 openlineage Spark 통합에 기여하고 있습니다. 이것은 다중 모듈 프로젝트이며 해당 모듈의 이름은 app
、shared
、spark2
、spark3
、spark32
、spark33
、spark34
和spark35
입니다.
질문:
런타임 오류를 방지하기 위해 Apache Spark의 scala 2.12 및 2.13 변형용 shared
模块。所有模块(spark2
到 spark35
)都依赖于 shared
。我的目标是编译像 spark35
这样的模块来生成两个版本:一个用于 scala 2.12,另一个用于 apache spark 的 scala 2.13 变体。这还需要使用相应的 spark 变体正确构建 shared
모듈을 빌드하려고 합니다.
촬영 방법:
spark33
、spark34
、spark35
和shared
中引入了源集scala213
和testscala213
。这些源集使用与 main
和 test
源相同的源。 apache spark 的 scala 2.12 变体的依赖项设置为默认值,并且我对 scala 2.13 源集有附加声明。这包括对 shared
모듈의 종속성에서 Java 라이브러리 플러그인을 사용합니다.
발생한 문제:
shared
项目请求 scala213runtimeelements
(甚至是 scala213apielements
配置)时,编译类路径不包含 shared
모듈에서 컴파일된 클래스를 가져올 때. 그러나 기본 구성으로 되돌린 후에는 이러한 클래스가 클래스 경로에 표시됩니다.
질문:
특정 구성(scala213runtimeelements
) 会导致 shared
模块的编译类从我的其他模块的编译类路径中丢失?如何解决此问题以确保 shared
스칼라 2.12 및 2.13 버전의 클래스 경로에 클래스가 포함된 모듈)을 지정하는 이유는 무엇입니까?
아래에서 다양한 build.gradle
파일을 찾을 수 있습니다.
share/build.gradle
으아아아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") } } 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 } }
알겠습니다. 나는 그것에 대해 생각했다. RTFM의 경우입니다.
구체적으로는 설명서의 이 부분입니다. shared
프로젝트에 "변형" 아티팩트를 추가하지 않았습니다. 따라서 Gradle은 무엇을 소비해야 할지 전혀 모릅니다. 혼란스럽게도 기본 구성은 클래스를 사용하는 반면 변형에는 JAR이 필요합니다.
위 내용은 사용자 정의 소스 세트를 사용한 Gradle 다중 모듈 빌드: 종속 모듈의 컴파일 클래스 경로에서 클래스가 누락되었습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!