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

How to set environment variable CLASSPATH and NoClassDefFoundError on LINUX

我一直在研究 classpaths 并且遇到了一个问题。 我使用了下面的代码:

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 子
  3. 设置类路径=.:.\sub;
  4. 移动AAA.class.\sub\AAA.class
  5. 移动 BBB.class .\sub\BBB.class
  6. java ABMain

当我检查子目录时,我发现 AAA.class 和 BBB.class 已正确移动,但是当我尝试 运行 ABMain 时,我得到以下信息:

Exception in thread "main" java.lang.NoClassDefFoundError: AAA at ABMain.main(ABMain.java:17) Caused by: 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 more

您能否评论一下我应该更改哪些内容才能使其正常工作?提前谢谢你。

你需要在ABMain之前导入sub的包class因为你的ABMain如何才能知道AAA和BBB的位置

我建议在 AAA Class 和 BBB class

之前使用

包子;

并通过在 ABMain class

之前编写以下代码来导入包

进口子.*;

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

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