如何在LINUX上设置环境变量CLASSPATH和NoClassDefFoundError

时间:2017-07-25 16:56:42

标签: java linux classpath noclassdeffounderror

我一直在研究课程路径并遇到了一个问题。 我使用下面的代码:

class AAA 
{
    public AAA() 
    {
        System.out.println("AAA");
    }
}
class BBB 
{
    public BBB() 
    {
        System.out.println("BBB");
    }
}
class ABMain 
{
    public static void main(String[] args) 
    {
        AAA aaa=new AAA();
        BBB bbb=new BBB();
    }
}

在终端上,我做了:

  1. javac ABMain.java
  2. mkdir sub
  3. 设置CLASSPATH =。:。\ sub;
  4. 移动AAA.class。\ sub \ AAA.class
  5. 移动BBB.class。\ sub \ BBB.class
  6. java ABMain
  7. 当我检查子目录时,我发现AAA.class和BBB.class被正确移动了,但是当我尝试运行ABMain时,我得到以下内容:

      

    线程“main”中的异常java.lang.NoClassDefFoundError:AAA     在ABMain.main(ABMain.java:17)   引起:java.lang.ClassNotFoundException:AAA     at java.net.URLClassLoader.findClass(URLClassLoader.java:381)     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)     at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:335)     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)     ......还有1个

    请您评论一下我应该改变什么才能让它发挥作用?提前谢谢。

2 个答案:

答案 0 :(得分:0)

您需要在ABMain类之前导入sub的包,因为您的ABMain如何能够知道AAA和BBB的位置

我建议在AAA Class和BBB class之前使用

包子;

并通过在ABMain类

之前编写下面的代码来导入包

import sub。*;

答案 1 :(得分:0)

根据标题,您使用LINUX。但是你的步骤适用于Windows生态系统。 要更正示例,您应该使用直接斜杠作为路径分隔符,并将当前目录添加为CLASSPATH替代(以便能够加载主类):

  1. javac ABMain.java
  2. mv AAA.class ./sub/AAA.class
  3. mv BBB.class ./sub/BBB.class
  4. java -cp ./sub:. ABMain