Java 无法在 JAR 中找到类

标签 java intellij-idea

我有一个中等大小的项目,我计划创建一个 uber-jar。我使用 Intellij 对其进行编译,并构建了一个工件,其中“来自库的 JAR 文件”设置为“提取到目标 JAR”。

结果如下:

java -cp MyJar.jar com.package.MainClass
Error: Could not find or load main class com.package.MainClass

java -Xdiag -cp MyJar.jar com.package.MainClass
Error: Could not find or load main class com.package.MainClass
Caused by: java.lang.ClassNotFoundException: com.package.MainClass
java.lang.ClassNotFoundException: com.package.MainClass
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:415)
    at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:770)
    at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:655)

如果我列出 jar 的内容,则该类就在那里。 如果我提取 jar 并从文件系统运行该类,它就会起作用:

jar xf MyJar.jar
java com.package.MainClass <-- it works

如果在 IntelliJ 中,我将“库中的 JAR 文件”设置为“复制输出并通过 list 链接”,则 jar 确实可以工作,但我会在目标目录中得到一堆较小的 jar 文件。

有谁知道可能会出现什么问题以及我应该如何调试它?

最佳答案

经过多次试验,似乎包含一些 JAR 会导致问题:power-mock、objenesis 和mockito。

关于Java 无法在 JAR 中找到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56762309/

相关文章:

java - JButton 的 doClick() 方法

java - 同步:ImageDownloader线程

javascript - JSON 数字是否与 JavaScript 的数字相关联?

intellij-idea - 如何在 Android Studio 中移动(上/下)代码行?

java - 无法部署我的 Web 应用程序(Spring MVC、Tomcat 服务器、Maven、IntelliJ)

java - 如何调用另一个类中的类的方法?

java - IntelliJ 抑制 API 方法的未使用警告

java - 在 IntelliJ IDEA 中导入 Maven 依赖项

scala - 加特林。连接异常 : connection timed out:

java - 在数据库中保存 BCryptPasswordEncoder 时出错