【问题标题】:ClassNotFoundException in MicronautMicronaut 中的 ClassNotFoundException
【发布时间】:2021-11-29 21:07:24
【问题描述】:

几天前我开始学习 micronaut,从上周开始我试图解决以下异常但无法解决这个问题。

我不知道为什么这个应用程序找不到主类。一切似乎都是正确的

我尝试了很多解决方案,但没有一个对我有用。

我创建了基本的演示应用程序并创建了 jar 文件,然后我使用这些命令使用 jar 文件运行 micronaut 应用程序,但出现以下异常 CMD1

java -cp build/libs/demo2-0.1.jar  com.example.Application

CMD2

 java -jar build/libs/demo2-0.1.jar 

Gradle 文件

plugins {
    id("com.github.johnrengelman.shadow") version "7.0.0"
    id("io.micronaut.application") version "2.0.6"
    id 'java'
}

version = "0.1"
group = "com.example"

repositories {
    mavenCentral()
}

micronaut {
    runtime("netty")
    testRuntime("junit5")
    processing {
        incremental(true)
        annotations("com.example.*")
    }
}

dependencies {
    // https://mvnrepository.com/artifact/io.micronaut/micronaut-runtime
    implementation("io.micronaut:micronaut-runtime:3.1.0")

    annotationProcessor("io.micronaut:micronaut-http-validation")
    implementation("io.micronaut:micronaut-http-client")
    runtimeOnly("ch.qos.logback:logback-classic")
    implementation("io.micronaut:micronaut-validation")

}


application {
    mainClass.set("com.example.Application")
}
java {
    sourceCompatibility = JavaVersion.toVersion("1.8")
    targetCompatibility = JavaVersion.toVersion("1.8")
}





jar {
    manifest {
        attributes(
                'Main-Class': 'com.example.Application'
        )
    }
}

例外

Exception in thread "main" java.lang.NoClassDefFoundError: io/micronaut/runtime/Micronaut
        at com.example.Application.main(Application.java:8)
Caused by: java.lang.ClassNotFoundException: io.micronaut.runtime.Micronaut
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

在ans中运行给定的cmd后:

BLRETV-MMMMMM:demo2 User$ java -jar build/libs/demo2-0.1-all.jar
Error: Unable to access jarfile build/libs/demo2-0.1-all.jar
BLRETV-MMMMMM:demo2 User$ java -cp build/libs/demo2-0.1-all.jar  com.example.Application
Error: Could not find or load main class com.example.Application

【问题讨论】:

    标签: gradle executable-jar noclassdeffounderror micronaut


    【解决方案1】:

    您需要使用-all jar,即

    java -cp build/libs/demo2-0.1-all.jar com.example.Application

    java -jar build/libs//demo2-0.1-all.jar

    【讨论】:

    • 感谢您的快速响应。但是这两个命令不起作用。我在上面添加了两个 cmd 的结果。请帮助
    • 可能有帮助的一件事 - 从 implementation("io.micronaut:micronaut-runtime:3.1.0") 中删除版本 - 该插件添加了一个具有正确版本的 Maven BOM,因此就像您不需要的其他 Micronaut 依赖项一样(也不应该在它们不兼容的情况下使用)来指定依赖版本
    • 另外,Error: Unable to access jarfile build/libs/demo2-0.1-all.jar 可能是对真正问题的一个重要提示
    • 我认为 libs 文件夹中不存在 demo2-0.1-all.jar 。它是 demo2-0.1.jar(如上图所示),这就是出现此错误的原因。如果我在没有“-all”的情况下在 cmd 上运行,我得到 NoClassfoundException
    • 你是如何运行你的构建的?如果您运行./gradlew assemble,它应该可以工作
    【解决方案2】:

    我建议首先尝试运行命令行 gradlew 命令,以确保应用程序与运行时一起工作。 尝试 gradlew testgradlew run

    您可能会发现我们的指南也很有帮助。

    https://guides.micronaut.io/latest/creating-your-first-micronaut-app-gradle-java.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多