在Ubuntu中正确设置java classpath和java_home

我收到错误

线程“main”中的exceptionjava.lang.NoClassDefFoundError:

当我尝试在Ubuntu上运行一个编译的类。 我正在使用一个非常简单的Helloworld示例,并且互联网上已经存在的数百万个响应表明我的CLASSPATH和JAVA_HOMEvariables被错误地设置了。

不过,我已经编辑了etc / environment到正确的文件夹以及当前的文件夹:

PATH = “:在/ usr / local / sbin中:在/ usr / local / bin目录:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏”

JAVA_HOME = “/ usr / lib中/ JVM / java的1.5.0-太阳/”

CLASSPATH = “:/ usr / lib中/ JVM / JAVA-1.5.0-太阳/ lib目录”

当我键入set命令时,它们就会出现。 在任何情况下,即使我手动设置类path使用

sudo java -cp。 myfirstjavaprog.class

我犯了同样的错误。 我应该在哪里看? 这必须是一个configuration问题。

非常感谢

你想从最后删除.class。 只要输入…

java -cp . myfirstjavaprog 

我强烈建议摆脱CLASSPATH环境变量,或者至少把你的JRE / JDK带出来。

"." 除非另外指定,否则都隐含在类路径中。 而从Java 1.3开始,Java就足够聪明,可以根据javac / java可执行文件的执行路径找到自己的运行库和库。 从那以后,如果不是完全错误的话,在类路径中指定它们是多余的。 当然.../lib是不正确的,因为那里只有jar,没有类,如果没有单独和明确的命名,那么这些类不会从classpath中拾取。

现代的javas足够聪明,当你站在类路径的根目录下时,你可以直接输入java <classname> ,它将会Just Work™。

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

 java -cp pathelement1:pathelement2... MyClass 

你给java的地方列表来找到可运行的类。 除非你告诉它,否则它不会在其他地方看到,包括“。”。 所以“CLASSPATH”不会帮助你,除非你运行

 java -cp $CLASSPATH MyClass 

换句话说,它只是一个不断重新输入类路径的捷径。

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

您的PATH是系统查找二进制文件的路径。 如果java不在你的路径上(输入“which java”,它会告诉你哪一个,如果有的话,java是在你的路径上)running / full / path / to / java与刚刚运行“java”在PATH变量中找到二进制文件。

不,我认为这是CLASSPATH环境变量被忽略。

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

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

  1. 这是一个失宠的Java 1.0神器。
  2. JVM不能保证你已经设置了一个环境变量。
  3. IDE有自己的要求,所以他们不依赖于它。
  4. Java EE应用程序服务器有自己的要求,所以他们不依赖于它。
  5. 你必须每次都给整个路径,因为每个项目都可能是不同的。 一旦你通过“你好,世界”的进展,你会发现自己的脚本或使用像Ant和Maven这样的工具,可以帮助你为你的项目设置CLASSPATH。

使用

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

它设置了很多classpath的东西。

用于设置java_home变量,这里是说明。

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

类路径可以类似地设置

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

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

好的,我在错误的地方寻找问题。 事实证明,Java是好的,我是两个单独的问题得到同样的错误的受害者。

我原本试图运行一个从Java网站获得的swing例子,但是我没有注意到它有一个包的定义。 我已经建立了正确的文件夹结构,现在运行良好。

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

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

非常感谢您的帮助。