如何在 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();
}
}
在终端上,我做了:
- javac ABMain.java
- mkdir 子
- 设置类路径=.:.\sub;
- 移动AAA.class.\sub\AAA.class
- 移动 BBB.class .\sub\BBB.class
- 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):
javac ABMain.java
mv AAA.class ./sub/AAA.class
mv BBB.class ./sub/BBB.class
java -cp ./sub:. ABMain
我一直在研究 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();
}
}
在终端上,我做了:
- javac ABMain.java
- mkdir 子
- 设置类路径=.:.\sub;
- 移动AAA.class.\sub\AAA.class
- 移动 BBB.class .\sub\BBB.class
- 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):
javac ABMain.java
mv AAA.class ./sub/AAA.class
mv BBB.class ./sub/BBB.class
java -cp ./sub:. ABMain