简体   繁体   English

包中的类 - 线程“main”中的异常 java.lang.NoClassDefFoundError

[英]Class in a package - Exception in thread "main" java.lang.NoClassDefFoundError

I am trying to run a jar file in Hadooop (Ubuntu Linux).我正在尝试在 Hadoop (Ubuntu Linux) 中运行一个 jar 文件。

My file 'Project1.java' has a package defined, before the class, like this:我的文件“Project1.java”在类之前定义了一个包,如下所示:

package myPackage.comp;
public class Project1 {
---lines of code here---
}

I use the following commands to try to run it:我使用以下命令尝试运行它:

$ hadoop com.sun.tools.javac.Main Project1.java
$ jar cf proj1.jar Project1*.class
$ hadoop jar proj1.jar Project1 input output

and I get the following error:我收到以下错误:

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$1.run(URLClassLoader.java:458)
    at java.base/java.net.URLClassLoader$1.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)

When I look into the generated proj1.jar file, I can see a Project1.java class file in it.当我查看生成的 proj1.jar 文件时,可以看到其中有一个 Project1.java 类文件。

What am I missing here?我在这里缺少什么?

Update : If I remove the line更新:如果我删除该行

package myPackage.comp;

It works perfectly.它完美地工作。

How can I get it to work when including the class in a package?将类包含在包中时如何使其工作?

Every project must have a class called main.每个项目都必须有一个名为 main 的类。 So if you write main instead of Project1, the problem is solved.所以如果你写main而不是Project1,问题就解决了。

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

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