首页 文章

在Ubuntu中正确设置java classpath和java_home

提问于
浏览
9

我收到了错误

线程“main”java.lang.NoClassDefFoundError中的异常:

当我尝试在Ubuntu上运行编译类时 . 我正在使用一个非常简单的Helloworld示例,并且互联网上已存在的数百万个响应表明我的CLASSPATH和JAVA_HOME变量设置不正确 .

但是,我已将etc / environment编辑为正确的文件夹以及当前文件夹:

PATH =“ . :/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games”JAVA_HOME =“/ usr / lib / jvm /java-1.5.0-sun/"CLASSPATH =“ . :/ usr / lib / jvm / java-1.5.0-sun / lib”

当我输入set命令时它们会出现 . 无论如何,即使我手动设置类路径也是如此

sudo java -cp . myfirstjavaprog.class

我犯了同样的错误 . 我还应该在哪儿看?这必须是配置问题 .

非常感谢

8 回答

  • 0

    你想从最后删除.class . 只需输入...

    java -cp . myfirstjavaprog
    
  • 0

    我强烈建议删除CLASSPATH环境变量,或至少从中取出JRE / JDK .

    除非另有说明,否则 "." 隐含在类路径中 . 关于Java 1.3,Java已经足够聪明,可以根据javac / java可执行文件的执行路径找到自己的运行时和库 . 从那以后,在类路径中指定那些是多余的,如果不是完全错误的话 . 当然 .../lib 是不正确的,因为那里只有 jar ,没有类,并且那些没有单独和明确命名的't picked up off the classpath if they' .

    现代javas足够聪明,只要站在类路径的根目录中就可以输入 java <classname> ,它就是Just Work™ .

  • 5

    你正在混合苹果和橘子 . 命令行上的原始java或javac调用需要一个类路径来知道它可以访问其类的位置 . 当你跑步

    java -cp pathelement1:pathelement2... MyClass
    

    你给java提供了查找可运行类的地方列表 . 它不会在任何其他地方看,包括“ . ”,除非你告诉它 . 所以除非你跑,否则“CLASSPATH”对你没有帮助

    java -cp $CLASSPATH MyClass
    

    换句话说,它只是一个不断重新键入类路径的快捷方式 .

    许多程序都配置为使用JAVA_HOME,但最终运行java程序只需要一个已配置的类路径和java的路径(它们通过JAVA_HOME变量找到它,所以你仍然需要它来处理像ant这样的东西,但它的'概念上只是一个捷径以及) .

    PATH是系统查找二进制文件的路径 . 如果java不在你的路径上(键入“哪个java”,它将显示你的路径上有哪个java)运行/ full / path / to / java与运行“java”和拥有系统相同在PATH变量中找到二进制文件 .

  • 1

    不,我认为CLASSPATH环境变量被忽略了 .

    正确的方法是在编译和运行时使用-classpath选项 . 为每个项目设置它 . 你眼前的证据告诉你它是如此 .

    为什么忽略CLASSPATH?几个原因:

    • 它's a Java 1.0 artifact that'失宠了 .

    • JVM无法保证您将其设置为环境变量 .

    • IDE有自己的要求,所以他们不依赖它 .

    • Java EE应用服务器有自己的要求,因此它们不依赖于它 .

    • 每次都必须给出整条路径,因为每个项目可能都不同 . 一旦你超越了"Hello, World",你会发现自己编写脚本或使用像Ant和Maven这样的工具来帮助你为你的项目设置CLASSPATH .

  • 6

    使用

    sudo update-java-alternatives -s java-6-openjdk
    

    它设置了很多类路径的东西 .

  • 1

    设置java_home变量,这里有说明 .

    http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html

    classpath可以类似地设置

  • 0

    我强烈建议您花一些时间查看Sun教程 . 它会帮助你后来的阶级路径是臭名昭着的麻烦制造者 .

    http://java.sun.com/docs/books/tutorial/getStarted/TOC.html

  • 1

    好的,我在错误的地方寻找问题 . 原来,Java很好,我是两个不同问题得到同样错误的受害者 .

    我原本试图运行一个从Java网站获得的swing示例,但我没有注意到它有一个包定义 . 我已经设置了正确的文件夹结构,现在运行正常 .

    当我试图运行HelloWorld示例时,我不小心包含了.class扩展名 .

    这两个问题都给了我ClassNotFound错误 .

    非常感谢您的帮助 .

相关问题