在Ubuntu中正确设置java classpath和java_home

Setting up java classpath and java_home correctly in Ubuntu

我有错误

Exception in thread"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

我也有同样的错误。我还应该看看哪里?这一定是配置问题。

多谢


你想把.class从头到尾丢掉。只要键入…

1
java -cp . myfirstjavaprog


我强烈建议去掉classpath环境变量,或者至少去掉JRE/JDK。

除非另有规定,否则"."隐含在类路径中。自从Java 1.3以来,Java已经足够聪明,可以根据JavaC/Java可执行文件的执行路径找到自己的运行库和库。从那时起,在类路径上指定那些内容是多余的,如果不是完全错误的话。当然,.../lib是不正确的,因为那里只有jar,没有类,如果没有单独和明确地命名,就不会从类路径中提取它们。

现代javas足够聪明,当您站在类路径的根目录中时,只需键入java ,它就可以工作™。


使用

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

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


你在把苹果和桔子混在一起。命令行上的原始Java或JavaC调用需要一个类路径来知道它可以访问它的类。当你奔跑

1
java -cp pathelement1:pathelement2... MyClass

您给Java提供查找可运行类的位置列表。它不会在其他地方看到,包括".",除非你告诉它。所以"classpath"对你没有帮助,除非你跑

1
java -cp $CLASSPATH MyClass

换句话说,它只是一个快捷方式,可以继续重新输入类路径。

许多程序被配置为使用JavaJHOST,但最终运行Java程序只需要配置的类路径和Java路径(它们通过JavaJHOLD变量找到,所以您仍然需要它来处理像Ant之类的东西,但它的概念仍然只是一个快捷方式)。

您的路径是系统查找二进制文件的路径。如果Java不在您的路径上(类型"Java"),它将显示您的路径(如果有的话,Java)。运行/完全/路径/to/Java与运行"Java"相同,并使系统在路径变量中找到二进制。


不,我认为是类路径环境变量被忽略了。

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

为什么类路径被忽略?几个原因:

  • 这是一个Java 1伪品,已经失宠了。
  • JVM不能保证您已经将其设置为环境变量。
  • IDE有自己的需求,所以它们不依赖于它。
  • JavaEE应用服务器有他们自己的要求,所以他们不依赖它。
  • 每次都必须给出整个路径,因为每个项目都可能不同。一旦你通过了"你好,世界",你会发现你自己正在为它编写脚本,或者使用Ant和Maven这样的工具来帮助你为你的项目设置类路径。

  • 好吧,我找错地方了。原来Java是好的,我是两个单独的问题得到相同错误的受害者。

    我最初试图从Java网站上运行一个Swing实例,但我没有注意到它有一个包定义。我已经设置了正确的文件夹结构,现在运行正常。

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

    这两个问题都给了我classNotFound错误。

    非常感谢你的帮助。


    我强烈建议你花些时间看太阳教程。它将帮助你以后-阶级道路是臭名昭著的麻烦制造者。

    http://java.sun.com/docs/books/tutorial/getstarted/toc.html网站


    对于设置java_home变量,以下是说明。

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

    类路径可以类似地设置