简体   繁体   English

Java无法在JAR中找到类

[英]Java cannot find a class in a JAR

I have an average-sized project and I plan to create an uber-jar. 我有一个中等规模的项目,我计划创建一个超级罐子。 I compile it with Intellij and built an artefact with "JAR files from libraries" set to "extract to the target JAR". 我使用Intellij对其进行编译,并使用“来自库的JAR文件”设置为“提取至目标JAR”构建了人工制品。

Here is the outcome: 结果如下:

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)

If I list jar's content, the class is there. 如果我列出了jar的内容,则该类在那里。 If I extract the jar and run the class from the filesystem, it works: 如果我提取jar并从文件系统中运行类,则它可以工作:

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

If, in IntelliJ, I set "JAR files from libraries" to "Copy the output and link via manifest" the jar does work, but I get a bunch of smaller jar files in target directory. 如果在IntelliJ中,我将“来自库的JAR文件”设置为“通过清单复制输出并链接”,则jar确实起作用,但是我在目标目录中得到了一堆较小的jar文件。

Does anyone have any idea what could go wrong and how should I debug it? 有谁知道可能出什么问题,我应该如何调试?

经过多次试验,似乎包含一些JAR会引起问题:电源模拟,目标对象和模仿。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM