无法初始化 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 是否正常工作。
我构建了一个使用 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 是否正常工作。