在Ubuntu中正确设置java类路径和java_主页

在Ubuntu中正确设置java类路径和java_主页,java,ubuntu,path,classpath,java-home,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:/us

我发现了错误

线程“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命令时,它们就会出现。在任何情况下,即使我使用

sudojava-cp。myfirstjavaprog.class

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


非常感谢

您想从结尾处退出.class。只需键入

java -cp . myfirstjavaprog

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

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

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

  • 这是一个不受欢迎的Java1.0工件
  • JVM不能保证您已经将一个设置为环境变量
  • IDE有自己的需求,所以他们不依赖它
  • JavaEE应用服务器有自己的需求,所以它们不依赖它
  • 每次你都必须给出完整的路径,因为每个项目都可能是不同的。一旦你完成了“Hello,World”,你会发现自己正在编写脚本,或者使用Ant和Maven等工具来帮助你设置项目的类路径
    以下是设置java_home变量的说明


    类路径可以类似地设置

    我强烈建议您花些时间阅读Sun教程。它将帮助你以后的类路径是臭名昭著的麻烦制造者


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

    隐式位于类路径中,除非另有指定。从Java1.3开始,Java已经足够聪明,可以根据javac/Java可执行文件的执行路径找到自己的运行时和库。从那时起,在类路径上指定这些元素就算不是完全错误,也是多余的。当然,
    ../lib
    是不正确的,因为那里只有jar,没有类,如果它们没有单独和显式地命名,就不会从类路径中提取它们


    现代java非常聪明,当您站在类路径的根目录中时,只需键入
    java
    ,它就能正常工作™.

    你在把苹果和桔子混合。 命令行上的原始java或javac调用需要一个类路径来知道在哪里可以访问其类。当你跑的时候

    java -cp pathelement1:pathelement2... MyClass
    
    您为java提供了查找可运行类的位置列表。除非你告诉它,否则它不会在其他任何地方出现,包括“.”。因此,除非您运行,否则“类路径”对您没有帮助

    java -cp $CLASSPATH MyClass
    
    换言之,这只是一种让你不得不重新键入类路径的快捷方式

    许多程序被配置为使用JAVA_HOME,但最终运行JAVA程序只需要一个配置好的类路径和JAVA路径(它们通过JAVA_HOME变量找到它,所以对于ant之类的东西,您仍然需要它,但在概念上它也只是一个快捷方式)


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

    好的,我在错误的位置查找问题。结果证明Java很好,而我是两个不同问题的同一个错误的受害者

    我最初试图运行一个swing示例,它来自Java网站,但我没有注意到它有一个包定义。我已经设置了正确的文件夹结构,现在运行良好

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

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

    非常感谢您的帮助。

    使用

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

    它设置了很多类路径的内容。

    这不是个好主意。。因为每次他都必须给出完整的路径为什么类路径环境变量被忽略?@lakshamanan-错。他必须学会如何以适合未来项目的方式来完成,这些项目不太可能在命令行上编译和运行。然而,DOS的人是完蛋了。255个字符的命令行。再次感谢你,比尔!关键是,一旦通过“Hello,World”和教程,就没有人使用命令shell编译或运行任何有意义的东西。这根本不是你所说的问题。桌面应用程序使用脚本和Ant;部署的应用程序使用内置的约定。如果这是一个大问题,Java在几年前就会消亡。我很沮丧,以至于我没有发现这一点。这些变量已经设置好了,但由于某种原因它们被忽略了。我一定是有语法问题。你说得很对,问题是当我尝试编译任何导入swing组件的东西时,它给出了完全相同的错误。尽管HelloWorld.java示例很好。。。这看起来很奇怪。哦。。。请注意,Windows默认附带严重受损的Java,可执行文件位于Windows系统类路径中。请在DOS提示符下执行“java-version”,查看您正在运行的java版本是否为您想要的版本!同样的事情也可以说