簡體   English   中英

Gradle:java.lang.ClassNotFoundException:運行優步時 Jar

[英]Gradle : java.lang.ClassNotFoundException : When running Uber Jar

我正在嘗試使用 gradle 版本 6.0 在 java 中構建 uber jar,它構建良好。 但是當我運行 Uber Jar 時,它拋出以下錯誤

root@9393134c8941:/home/gradle/checkout-service# java -jar build/libs/checkout-service-1.0-SNAPSHOT-uber.jar
Error: Could not find or load main class com.noths.runner.Runner
Caused by: java.lang.ClassNotFoundException: com.noths.runner.Runner

我的 build.gradle 文件如下所示

// Shadow Plugin https://github.com/johnrengelman/shadow
plugins {
    id 'java'
}

group 'com.noths'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'

    compileOnly 'org.projectlombok:lombok:1.18.20'
    annotationProcessor 'org.projectlombok:lombok:1.18.20'

    testCompileOnly 'org.projectlombok:lombok:1.18.20'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'

    implementation 'com.google.code.gson:gson:2.8.8'

    implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    testImplementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

    implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.2.3'
    testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}

test {
    useJUnitPlatform()
}

task uberJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'com.noths.runner.Runner'
    }
    archiveClassifier = 'uber'

    from sourceSets.main.output

    dependsOn configurations.runtimeClasspath
    from {
        configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
    }
}

我正在按照以下步驟構建超級 jar

cd /home/gradle/checkout-service/
rm -rf .gradle
gradle clean
gradle build --refresh-dependencies
gradle uberJar;

優步 Jars 在 output

root@9393134c8941:/home/gradle/checkout-service# ls -lh build/libs/
total 736K
-rw-r--r-- 1 root root  261 Aug 25 05:07 checkout-service-1.0-SNAPSHOT.jar
-rw-r--r-- 1 root root 729K Aug 25 05:08 checkout-service-1.0-SNAPSHOT-uber.jar

我也打開了 uber jar,它的 Runner class 位於與 build.gradle 相同的路徑。

誰能告訴我我錯過了什么?

這里有很多不對勁的地方:

  1. 之所以找不到你項目的main class,可能是因為沒有manifest聲明它。

  2. 你提到你正在使用 Gradle 影子 Jar 插件(假設這個)。 盡管您這樣做了,但您似乎定義了一個自定義 jar 任務來創建胖 jar。

基於以上所有內容,我將執行以下操作:

  1. 擺脫多余的自定義任務
  2. 這里查看ShadowJar的文檔,以便正確了解如何設置它。

暫無
暫無

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

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