在Ubuntu中正确设置java classpath和java_home

时间:2009-12-29 17:01:05

标签: java ubuntu path classpath java-home

我收到错误

  

线程“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 /游戏”

     

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

     

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

并在我输入set命令时出现。在任何情况下,即使我使用

手动设置类路径
  

sudo java -cp。 myfirstjavaprog.class

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

非常感谢

8 个答案:

答案 0 :(得分:6)

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

java -cp . myfirstjavaprog

答案 1 :(得分:5)

我强烈建议删除CLASSPATH环境变量,或者至少将JRE / JDK从中删除。

除非另有说明,否则

"."隐含在类路径中。关于Java 1.3,Java已经足够聪明,可以根据javac / java可执行文件的执行路径找到自己的运行时和库。从那以后,如果不是完全错误的话,在类路径中指定那些是多余的。当然.../lib是不正确的,因为那里只有罐子,没有类,如果它们没有被单独和明确地命名,那么它们就不会从类路径中被拾取。

现代javas非常聪明,只要站在类路径的根目录下就可以输入java <classname>,它就是Just Work™。

答案 2 :(得分:1)

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

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

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

  1. 这是一个不受欢迎的Java 1.0工件。
  2. JVM无法保证您将其设置为环境变量。
  3. IDE有自己的要求,所以他们不依赖它。
  4. Java EE应用服务器有自己的要求,所以他们不依赖它。
  5. 您必须每次都提供整条路径,因为每个项目可能都不同。一旦你走过“Hello,World”,你会发现自己编写脚本或使用像Ant和Maven这样的工具来帮助你为你的项目设置CLASSPATH。

答案 3 :(得分:1)

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

java -cp pathelement1:pathelement2... MyClass

你给java提供了查找runnable类的地方列表。它不会在任何其他地方看,包括“。”,除非你告诉它。所以除非你运行

,否则“CLASSPATH”对你没有帮助
java -cp $CLASSPATH MyClass

另一方面,它只是一个不得不重新键入类路径的快捷方式。

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

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

答案 4 :(得分:1)

使用

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

它设置了很多类路径。

答案 5 :(得分:0)

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

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

类路径可以类似地设置

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

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

当我尝试运行HelloWorld示例时,我意外地包含了.class扩展名。

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

非常感谢你的帮助。