Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在LINUX上设置环境变量CLASSPATH和NoClassDefFoundError_Java_Linux_Classpath_Noclassdeffounderror - Fatal编程技术网

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

Java 如何在LINUX上设置环境变量CLASSPATH和NoClassDefFoundError,java,linux,classpath,noclassdeffounderror,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)

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

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
  • 爪哇岛
  • 当我检查子目录时,我发现AAA.class和BBB.class已正确移动,但当我尝试运行ABMain时,我得到以下结果:

    线程“main”java.lang.NoClassDefFoundError中出现异常:AAA 在ABMain.main(ABMain.java:17) 原因:java.lang.ClassNotFoundException:AAA 位于java.net.URLClassLoader.findClass(URLClassLoader.java:381) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:424) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有一个


    你能评论一下我应该做些什么来让它工作吗?提前谢谢。

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

    我建议在AAA级和BBB级之前使用

    包装分包

    并通过在ABMain类之前编写以下代码来导入包


    进口分包商*

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

  • javac ABMain.java
  • mv AAA.class./sub/AAA.class
  • mv BBB.class./sub/BBB.class
  • java-cp./sub:。ABMain

  • 可能重复我使用了你提供的命令,效果很好!在第四步中,请您解释一下命令(我不完全理解-cp./sub:)?谢谢。-cp标志指定特定java启动的类路径,而不是全局设置。在linux中,全局设置CLASSPATH变量如下:export CLASSPATH=/some/path/one:/some/path/two:/some/path/three这里是相同的-设置两个路径。和./subI希望文件在没有导入包的情况下运行,因为我在完成代码编写后移动了AAA.class和BBB.class。