zoukankan      html  css  js  c++  java
  • 【转】classpath和环境变量设置

    http://www.360doc.com/content/12/0722/14/820209_225797366.shtml

    在没有设置环境变量之前,我们可以通过直接在应用程序中加带相关信息来运行我们的程序。比如,我们可以这样开始运行一个Java程序:

    C:/jdk1.3.1/bin/java -jar C:/windows/desktop/myfiles/SimpleColorConverter.jar

    这样肯定没有错误,每次我们不得不敲上java应用程序的全路径和class文件的全路径,我们写一次没问题,两次不觉得长,三次也不觉得累,可是假如我们每次都要重复的敲上这一堆路径的话,那真的将会是一场噩梦。那么,我们怎么做才能够减轻我们的输入量呢?

    一、简介:

    环境变量是操作系统、应用程序、脚本程序等等的指明灯,能够告诉他们需要的资源在哪里。大多数的系统都有一些预先设置好的环境变量,当然,我们也可以增加自己的环境变量。为了看看当前系统的环境变量,我们可以用如下的命令:在Linux/Unix系统上,在shell命令符输入 env ,然后回车在Windows系统中,在DOS窗口提示符输入 set ,然后回车 这样,我们就可以看到系统当中的所有环境变量,假如我们想看看单个变量的值呢.

    linux/Unix系统上,在shell命令符输入 echo $变量名 ,然后回车

    在Windows系统中,在DOS窗口提示符输入 set 变量 或者 echo %变量%,然后回车

    假如要设置一个环境变量,可以用下面的命令:

    在Linux/Unix系统上,在shell命令符输入 eXPort 变量名="变量值" ,然后回车

    这样,就设置好了。

    path和classpath环境变量的值都是一些有顺序的目录列表。告诉系统或者应用程序到哪里去寻找它们需要的资源。这个目录列表是由一系列的分隔符分开的,Linux/Unix系统下分隔符是冒号“:” windows系统中是分号“;”。假如,我们想在某个已经存在的环境变量值下加一些自己的值的话,可以这样:

    Linux/Unix系统下: export CLASSPATH=$CLASSPATH:/path/to/program

    Windows系统下: set CLASSPATH = %CLASSPATH%;c:/path/to/program

    二、设置Java环境

    要想方便的开发和运行Java应用程序,我们需要设置两个环境变量,一个path一个classpath。

    设置好path变量,使得我们能够在系统中的任何地方运行java应用程序,比如javac、java、javah等等。

    这就要找到我们安装JDK的目录,比如我们的JDK安装在c:/jdk1.3/目录下,那么在c:/jdk1.3/bin目录下就是我们常用的java应用程序,我们就需要把c:/jdk1.3/bin这个目录加到path环境变量里面。

    classpath环境变量,是当我们在开发java程序时需要引用别人写好的类时,要让java解释器知道到哪里都位于c:/jdk1.3/lib目录下,所以通常我们都会把这两个jar包加到我们的classpath环境变量中。

    需要跟上完整地文件路径,而不能仅仅跟一个目录。第一个路径的点“.”,代表当前目录,这样当我们运行java AClass的时候,系统就会先在当前目录寻找AClass文件了。

    JAVA_HOME指向的是JDK的安装路径,如PATH环境变量原来Windows里面就有,你只需修改一下,使他指向JDK的bin目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上%JAVA_HOME%/bin (注,如果你对DOS批处理不了解,你可能不明白%%引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量JAVA_HOME,你写成C:/JDK_1.4.2也是可以的;你可以打开一个控制台窗口,输入echo %JAVA_HOME%来看一下你的设置结果) :
    PATH=%JAVA_HOME%/bin;%PATH%。

    同样,%PATH%是引用以前你设置的PATH环境变量,你照抄以前的值就行了。

    CLASSPATH环境变量我放在最后面,是因为以后你出现的莫名其妙的怪问题80%以上都可能是由于CLASSPATH设置不对引起的,所以要加倍小心才行。
    CLASSPATH=.;%JAVA_HOME%/lib/tools.jar。

    首先要注意的是最前面的".;",如果你看不清,我给你念念——句点分号。这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件——为什么这样搞,这是由于LINUX的安全机制引起的,LINUX用户很明白,WINDOWS用户就很难理解(因为WINDOWS默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索PATH环境变量设定的) ,所以如果喜欢盘根究底的朋友不妨研究一下LINUX。

    为什么CLASSPATH后面指定了tools.jar这个具体文件?不指定行不行?显然不行,行的话我还能这么罗索嘛!:) 这个是由java语言的import机制和jar机制决定的,你可以查资料解决。

    具体的设定方法: win2k/xp用户右键点击我的电脑->属性->高级->环境变量,修改下面系统变量那个框里的值就行了。

    win9x用户修改autoexec.bat文件,在其末尾加入:

    set JAVA_HOME=C:/JDK_1.4.2

    set PATH=%JAVA_HOME%/bin;%PATH%

    set CLASSPATH=.;%JAVA_HOME%/lib/tools.jar Java中JAVA_HOME与CLASSPATH的解析 2009-10-26 10:0945

    很多人在初学Java的时候经常会被书中介绍的一堆环境变量的设置搞得头昏脑胀,很多书中都会在初装JDK的时候让他大家设置JAVA_HOME环境变 量,在开发程序的时候设置CLASSPATH环境变量,而很多人并不理解这两个环境变量的作用,我们来分别进行详细的阐述。

    首先是JAVA_HOME环境变量,我们先来掌握这个环境变量的设置内容,JAVA_HOME这个环境变量的设置内容是JDK的安装目录,比如说您的JDK安装在d:k1.6.0这个目录下,请您查看一下这个目录下是不是有一个子目录bin,bin目录中是不是有java.exe这个文件,如果 是,那么您的JAVA_HOME环境变量的内容应该为d:k1.6.0。

    那么我们设置这个环境变量的作用是什么呢?就单独的java开发而言,这个 环境变量并没有任何作用,这就是很多根据书上的描述设置好之后,把一本书学完也没有用到这个变量,所以很是不理解。

    其实JAVA_HOME变量最好还是设置一下,首先,我们为了能够编译和运行java程序,需要在PATH环境变量中把java.exe所在的目录设置为PATH变量的一部分,目的是为了能够通过命令行运行javac和java命令成为可能,当你在命令行中输入javac ...或者java ...的时候,如果提示你一个错误:'javac'不是内部命令或外部命令,也不是可运行的程序或批处理文件。

    这时候说明操作系统没有找到你通过命令行输入的javac这个命令,为什么呢?因为操作系统并 不知道你的javac.exe这个文件在哪里,所以无法执行对应的文件。那么为了能够让操作系统找到这个可执行文件,我们就需要把javac.exe这个 可执行文件所在的目录作为PATH环境变量的一部分设置起来,这样当你在命令行输入一个命令的时候,操作系统就会自动搜索PATH变量中所指定的所有目录 了

    在Windows系统中PATH变量中的所有路径采用分号分割,如果在Linux系统中采用冒号分割。

    另外说明一点,如果你设置好了环境变量,在命令 行中还是出现同样的错误,那么有两种可能,一种就是你的设置不正确,另一种就是你的设置没有生效,一般你可以关闭命令行窗口再重新打开就可以了。

    这对这个设置,以刚才的目录为例,那么PATH变量中的内容就是...;d:k1.6.0/bin,这时候我们可以借用已经设定过的JAVA_HOME,将PATH的内容修改为:...;%JAVA_HOME%/bin,这样的设置有一定的好处,当你的系统中重新安装JDK,并改变过目录的话,你只要修改JAVA_HOME的内容就可以了,PATH则不需要修改。此外,JAVA_HOME变量还会有一些其他用途,比如Eclipse这个IDE,它本身是由java程序编写的,那么在运行的时候必然需要虚拟机的存在,所以Eclipse在启动时需要查找虚拟机,如果有JAVA_HOME这个变量,那么Eclipse就会利用这个变量找到虚拟机的路径。所以虽然开始JAVA_HOME环境变量可以不设置,但是还是建议大家为以后考虑而设置上。 我们继续来谈论CLASSPATH的问题,很多书上在讲解java程序的时候建议大家设置CLASSPATH这个环境变量,我们这里不建议大家设置。原因 我们会在稍后的时候看到。讲到CLASSPATH,我们首先来看编写java程序时一直在用的两个命令javac和java。

    javac的命令语法是这样的: javac <选项> <源文件> 我们常用的情况是这样的: javac -classpath <类路径> <要编译的java源文件> 这里的类路径输入什么呢?

    这里的类路径是指要编译的java源文件中所用的非java的基础API中的类在那个目录下,路径可以是多个目录,用分号隔开 来。比如说我们要编译App.java这个文件,而这个文件中用到了com.util这个包中的MyDate这个类,现在我们假设MyDate这个类存在 目录是:d:/mylib/com/util/MyDate.class,那么我们如何编译App这个类呢?

    我们的命令如下: javac -classpath d:/mylib App.java 注意这里的classpath的内容,我们只是指定路径到package所在目录,并不能把package一起指定进去,而且MyDate.class必 须在com/util这个目录中,因为这个类定义了package为com.util。

    好了现在你对javac中的classpath明白了吗?

    我们再来看java这个命令,这个命令的语法是这样的: java [选项] 类 [参数] 比如说以上面的例子,我们假设App这个类位于com.app这个package中,它的存放目录是:d:/dev/myapp/com/app/App.class,那么我们该如何运行这个类呢?命令如下: java -classpath d:/dev/myapp;d:/mylib com.app.App 从命令中我们可以看到,在classpath后面我们指定两个目录,分别是App这个类的package所在的目录和MyDate这个类的package所在的目录,这里的类路径要给定的是要运行的类和这个类用到的所有类的package所在的目录,多个目录之间用分号隔离开来,最后指定要运行的类的时候 必须加上package。

    好了到这里你应该彻底掌握了编译java程序和运行java程序的诀窍了吧。如果我们在系统环境变量中设置了CLASSPATH的话,在命令行中通过java运行的时候如果再不指定CLASSPATH参数,那么就会导致java虚拟机只是按照CLASSPATH环境变量中的目录搜索类,而不在你的当前 目录下搜索类,结果自然会出现Exception in thread "main" java.lang.NoClassDefFoundError,所以当你看到这个错误的时候请查看一下你的系统环境变量,如果没有设置CLASSPATH,那么在检查一下你的当前目录。

    为了确保万无一失,按照上面讲述的例子进行操作是不会发生任何错误。

  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/1693977889zz/p/7085768.html
Copyright © 2011-2022 走看看