无法初始化 main class com....,原因:java.lang.NoClassDefFoundError

Unable to initialize main class com...., Caused by: java.lang.NoClassDefFoundError

我构建了一个使用 Swing 和 Flatlaf 作为主题的 java 应用程序。

当我通过 IDE(InteliJ) 运行ning 应用程序时,运行ning 没有任何问题。 在我使用 Maven 的 package 命令成功构建它之后,当我尝试 运行 它时,我收到此错误:

(如果我通过 maven-jar-plugin:3.1.0 插件构建它,我会得到相同的结果)

Error: Unable to initialize main class com.Yad2AutomationWithGUI.bouncer.Main
Caused by: java.lang.NoClassDefFoundError: com/formdev/flatlaf/FlatDarculaLaf

我了解到它与安装在 PC 上的 JRE 和 JDK 有关,因此我已将它们都更新到最新版本并为它们更新了 env Path

C:\Users\USER>javac -version
javac 18.0.1.1

C:\Users\USER>java -version
java version "18.0.1.1" 2022-04-22
Java(TM) SE Runtime Environment (build 18.0.1.1+2-6)
Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)

我以这种方式使用 Maven 导入了 Flatlaf 存储库:

<dependencies>
    <dependency>
        <groupId>com.formdev</groupId>
        <artifactId>flatlaf</artifactId>
        <version>2.2</version>
    </dependency>
        ....
</dependencies>

谢谢。

您能否验证一下您使用 Maven 构建的 JAR 文件中是否包含 flatlaf 类?

编辑:Thorbjørn 的评论听起来更可靠,我建议您也查看类路径。

另一种选择是构建一个 'fat' JAR,其中也包含所有相关的 类。查看 Maven Shade 插件。

此异常通常发生是因为在程序执行期间无法在 运行 时间找到 .class 文件。有时,它也会发生,因为服务器引擎本身已损坏,在这种情况下必须使用新的服务器实例。

  • 修复:

手动替换部署目录中的.class文件。一旦找到 .class 个文件,它将 运行 成功。完美的解决方法是在 Shell 脚本或 Java class 中为 autoDeployment = "true" 编写逻辑,其中所有 classes(src 和 .class、目标文件夹和 webapp 中的其他文件夹)在它们的目录中展开、测试和验证,然后自动运行 webapplication 以查看 webapplication 是否正常工作。