簡體   English   中英

Gradle 多模塊項目編譯失敗,來自子模塊中提到的依賴項的“classNotFoundExceptions”

[英]Gradle multi-module project compilation fails with "classNotFoundExceptions" from dependencies mentioned in sub-modules

我有一個具有以下結構的 Java 項目的多模塊設置。

mainApp
|--> core-module
|       |--> src
|       |--> build.gradle
           |--> implementation group: 'org.apache.axis2', name: 'axis2-kernel', version: '1.7.8'
           |--> implementation group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.13'
           |--> implementation files('libs/some_local.jar')
           |--> compile project(":lib-module")
           |--> compile project(":lib-another-module")
           |--> ...

|       
|--> lib-module
|       |--> src
|       |--> build.gradle
           |--> implementation group: 'commons-lang', name: 'commons-lang', version: '2.6'
           |--> implementation files('libs/another_local.jar')
           |--> ...

|--> lib-another-module
|       |--> src
|       |--> build.gradle
           |--> implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
           |--> implementation files('libs/another_local.jar')
           |--> ...

| 
|--> settings.gradle
|--> build.gradle
|--> gradle.properties

mainApp/build.gradle文件中,我有一個“提到的”子模塊作為

sourceSets {
    main {
        java {
            srcDirs project('core-module').file("src")
            srcDirs project('lib-module').file("src")
            srcDirs project('lib-another-module').file("src")
        }
    }
}

如果我構建單個子模塊,它會被成功編譯,但是當我在 root 運行./gradlew compileJava時,它會失敗, classNotFoundExceptions從我已經在子模塊中提到的 jar 中出現classNotFoundExceptions


> Task :core-module:compileJava
//successful
> Task :lib-module:compileJava
//successful
> Task :lib-another-module:compileJava
//successful
> Task :compileJava
/.../core-module/src/java/../OAuthUtils.java:12: error: package org.apache.http does not exist
import org.apache.http.Header;
...
//FAILED!

這里./gradlew core-module:compileJava工作完美,但從 root 調用時編譯失敗。

  1. 我該如何處理?
  2. 是因為文件系統引用了一些本地 jars 嗎?

編輯

我發現指向子sub-module的根sourceSets{}編譯失敗,單個sub-module編譯成功。

但是,我需要這個sourceSets{}來創建所有sub-module一個整體 jar

注意:-我不是在這里創建fatJarshadedJar ,但我需要包含來自所有sub-modules所有包,而沒有依賴 jar。

這就是我如何成功地從所有sub-module創建一個整體式 jar

jar  {
    dependsOn compileJava

    manifest {
            def userName = System.properties['user.name']
            def javaVersion = JavaVersion.current()

            attributes 'Manifest-Version' : "1.0"
            attributes 'Built-By' : userName
            attributes 'Created-By' : "Java Version: " + javaVersion
    }
    destinationDir(file("$buildDir/image"))
    baseName(jarName)

    from project('core-module').sourceSets.main.output.classesDirs
    from project('lib-module').sourceSets.main.output.classesDirs
    from project('lib-another-module').sourceSets.main.output.classesDirs
  
}

暫無
暫無

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

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