Class 在包中 - 线程异常 "main" java.lang.NoClassDefFoundError
Class in a package - Exception in thread "main" java.lang.NoClassDefFoundError
我正在尝试 运行 Hadoop 中的 jar 文件 (Ubuntu Linux)。
我的文件 'Project1.java' 在 class 之前定义了一个包,如下所示:
package myPackage.comp;
public class Project1 {
---lines of code here---
}
我用下面的命令来尝试运行它:
$ hadoop com.sun.tools.javac.Main Project1.java
$ jar cf proj1.jar Project1*.class
$ hadoop jar proj1.jar Project1 input output
我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: comp/proj1/Project1 (wrong name: Project1)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
at java.base/java.net.URLClassLoader.run(URLClassLoader.java:458)
at java.base/java.net.URLClassLoader.run(URLClassLoader.java:452)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at org.apache.hadoop.util.RunJar.run(RunJar.java:316)
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
当我查看生成的 proj1.jar 文件时,我可以在其中看到一个 Project1.java class 文件。
我在这里错过了什么?
更新:如果我删除行
package myPackage.comp;
它完美运行。
在包中包含 class 时,我怎样才能让它工作?
每个项目都必须有一个名为 main 的 class。所以如果你写main而不是Project1,问题就解决了
我正在尝试 运行 Hadoop 中的 jar 文件 (Ubuntu Linux)。
我的文件 'Project1.java' 在 class 之前定义了一个包,如下所示:
package myPackage.comp;
public class Project1 {
---lines of code here---
}
我用下面的命令来尝试运行它:
$ hadoop com.sun.tools.javac.Main Project1.java
$ jar cf proj1.jar Project1*.class
$ hadoop jar proj1.jar Project1 input output
我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: comp/proj1/Project1 (wrong name: Project1)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
at java.base/java.net.URLClassLoader.run(URLClassLoader.java:458)
at java.base/java.net.URLClassLoader.run(URLClassLoader.java:452)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at org.apache.hadoop.util.RunJar.run(RunJar.java:316)
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
当我查看生成的 proj1.jar 文件时,我可以在其中看到一个 Project1.java class 文件。
我在这里错过了什么?
更新:如果我删除行
package myPackage.comp;
它完美运行。
在包中包含 class 时,我怎样才能让它工作?
每个项目都必须有一个名为 main 的 class。所以如果你写main而不是Project1,问题就解决了