목차
질문 내용
Solution
Java 사용자 정의 소스 세트를 사용한 Gradle 다중 모듈 빌드: 종속 모듈의 컴파일 클래스 경로에서 클래스가 누락되었습니다.

사용자 정의 소스 세트를 사용한 Gradle 다중 모듈 빌드: 종속 모듈의 컴파일 클래스 경로에서 클래스가 누락되었습니다.

Feb 11, 2024 pm 11:27 PM

php 편집기 Xinyi는 이 기사에서 사용자 정의 소스 세트와 함께 Gradle 다중 모듈 구성을 사용하는 방법을 소개합니다. 빌드 프로세스 중에 종속 모듈의 컴파일된 클래스 경로에 클래스가 누락되는 문제가 자주 발생합니다. 이 기사에서는 이 문제의 원인을 자세히 설명하고 모든 필수 클래스가 종속 모듈의 컴파일된 클래스 경로에 포함되도록 하는 솔루션을 제공합니다. 이 글의 안내를 통해 Gradle 다중 모듈 구성에서 사용자 정의 소스 세트 기능을 더 잘 이해하고 적용할 수 있으며, 프로젝트의 구성 효율성과 유지 관리성을 향상시킬 수 있습니다.

질문 내용

저는 현재 완전히 Java로 작성되고 Gradle(8.4)로 구축된 프로젝트인 openlineage Spark 통합에 기여하고 있습니다. 이것은 다중 모듈 프로젝트이며 해당 모듈의 이름은 appsharedspark2spark3spark32spark33spark34spark35입니다.

질문: 런타임 오류를 방지하기 위해 Apache Spark의 scala 2.12 및 2.13 변형용 shared 模块。所有模块(spark2spark35)都依赖于 shared。我的目标是编译像 spark35 这样的模块来生成两个版本:一个用于 scala 2.12,另一个用于 apache spark 的 scala 2.13 变体。这还需要使用相应的 spark 变体正确构建 shared 모듈을 빌드하려고 합니다.

촬영 방법: spark33spark34spark35shared中引入了源集scala213testscala213。这些源集使用与 maintest 源相同的源。 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
    }
}
로그인 후 복사

Solution

알겠습니다. 나는 그것에 대해 생각했다. RTFM의 경우입니다.

구체적으로는 설명서의 이 부분입니다. shared 프로젝트에 "변형" 아티팩트를 추가하지 않았습니다. 따라서 Gradle은 무엇을 소비해야 할지 전혀 모릅니다. 혼란스럽게도 기본 구성은 클래스를 사용하는 반면 변형에는 JAR이 필요합니다.

위 내용은 사용자 정의 소스 세트를 사용한 Gradle 다중 모듈 빌드: 종속 모듈의 컴파일 클래스 경로에서 클래스가 누락되었습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)