gpt4 book ai didi

java - 在编译和运行时指定相同的 jar 文件时抛出 NoClassDefFoundError

转载 作者:行者123 更新时间:2023-11-30 05:05:51 27 4
gpt4 key购买 nike

您好,我尝试从自己的代码中使用外部 Java 包,但不断收到 NoClassDefFoundError 即使我使用的是与编译时相同的类路径。

为了让您开心,我提供了一个简单的复制品,这对我来说无疑是一个愚蠢的错误(到目前为止我已经花了大约 6 个小时)

/* WTF/WTF.java */  
import foo.Bar;
class WTF
{
public static void main(String[] args)
{
Bar dontCare = new Bar();
}
}

/* WTF/foo/Bar.java */
package foo;

class Bar
{
public Bar() {}
}

现在,我从 WTF 目录运行以下命令:

javac foo/Bar.java              [ok]  javac WTF.java                  [ok]  java WTF                        [ok]  jar cf foo.jar foo              [ok]  

我删除了 WTF/foo 目录,因此只有 WTF/foo.jar 可用。

javac WTF.java -cp foo.jar      [ok]  java WTF -cp foo.jar            [$!@#$!]  
Exception in thread "main" java.lang.NoClassDefFoundError: foo/Bar    at WTF.main(WTF.java:7)Caused by: java.lang.ClassNotFoundException: foo.Bar    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

非常感谢任何线索!

最佳答案

WTF.class 所在的目录应该位于类路径中。另外,Bar 应该是公开的。

java -cp foo.jar:. WTF

: 是 Linux 中的路径分隔符,如果您使用的是 Windows,请将其替换为 ;

关于java - 在编译和运行时指定相同的 jar 文件时抛出 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com