Java 类路径
Java 类路径告诉 java 解释器和 javac 编译器去哪里它们要执行或导入的类。类(您可能注意到的那些 *.class 文件)可以存储在目录或 jar 文件中,或者存储在两者的组合中,但是只有在它们位于类路径中的某个地方时,Java 编译器或解释器才可以到它们。
在 Windows 中,类路径中的多个项是用分号分隔( ;)的,而在 UNIX 中,这些项是用冒号分隔( :)的。在以下实例中,类路径中包括两个 Cloudscape jar 文件( cs.jar 和 cstools.jar ),以及一个存储 *.class 文件的目录位置( myDevDir ):
Windows 类路径:
c:\Cloudscape_10.0\lib\cs.jar;c:\Cloudscape_10.0\lib\cstools.jar;c:\myPath\myDevDir
UNIX 类路径:
/Cloudscape_10.0/lib/cs.jar:/Cloudscape_10.0/lib/cstools.jar:/myPath/myDevDir
本文中的其余实例使用的都是 Windows 语法,因此,如果您是在 UNIX 机器上,那么需要对语法进行相应的调整。
Java 类路径告诉 java 解释器和 javac 编译器去哪里它们要执行或导入的类。类(您可能注意到的那些 *.class 文件)可以存储在目录或 jar 文件中,或者存储在两者的组合中,但是只有在它们位于类路径中的某个地方时,Java 编译器或解释器才可以到它们。
在 Windows 中,类路径中的多个项是用分号分隔( ;)的,而在 UNIX 中,这些项是用冒号分隔( :)的。在以下实例中,类路径中包括两个 Cloudscape jar 文件( cs.jar 和 cstools.jar ),以及一个存储 *.class 文件的目录位置( myDevDir ):
Windows 类路径:
c:\Cloudscape_10.0\lib\cs.jar;c:\Cloudscape_10.0\lib\cstools.jar;c:\myPath\myDevDir
UNIX 类路径:
/Cloudscape_10.0/lib/cs.jar:/Cloudscape_10.0/lib/cstools.jar:/myPath/myDevDir
本文中的其余实例使用的都是 Windows 语法,因此,如果您是在 UNIX 机器上,那么需要对语法进行相应的调整。
设置 Java 类路径
有三种方式设置 Java 类路径:
1.永久地,通过在系统级上设置 CLASSPATH 环境变量来实现。
使用控制面板的系统设置来添加名为 CLASSPATH 的新变量,从而永久性地设置 Windows 环境变量。
UNIX 用户可以通过向 .profile 或 .cshrc 文件添加 CLASSPATH 变量来永久设置类路径。
2.临时地,通过在命令窗口或 shell 中设置 CLASSPATH 环境变量来实现。
在 Windows 命令窗口中临时设置 CLASSPATH
C:\>set CLASSPATH=%CLOUDSCAPE_INSTALL%\lib\cs.jar;.;
如果是临时设置类路径,那么每次打开新的命令窗口时,都需要再次设置它。
3.在运行时进行,每次启动 Java 应用程序和 JVM,都要指定类路径。
运行时使用 -cp 选项来指定类路径,这里的运行时是指启动应用程序和 JVM 时。
例如
C:\Cloudscape_10.0\demo\programs\simple>java -cp %CLOUDSCAPE_INSTALL%\lib\cs.jar; SimpleApp
java配置用户变量检测问题
常见类路径错误
主要有两种类型的类路径问题。第一类问题发生在没有从类路径中到您试图使用的 Java 类时,此时,它抛出一个 java.lang.ClassNotFoundException 异常。第二类问题发生在到了您正试图使用的类,但没有到它所导入的某个类时。本例中,在编译时显示了所导入的类,但在运行时,所导入的类没有包含在类路径中。这将抛出一个 java.lang.NoClassDefFoundError 异常。还有另一种考虑 NoClassDefFoundError 的方式,也就是说,在编译当前执行的类时,所搜索的类定义是存在的,但在运行时却再也无法到该定义了
如何可以解决这类问题呢?首先,检查类路径,验证库是否真正位于您认为的地方。例如,在 Windows 中使用该命令来输出类路径:
C:\my_dir>echo %CLASSPATH%
java配置用户变量检测问题
常见类路径错误
主要有两种类型的类路径问题。第一类问题发生在没有从类路径中到您试图使用的 Java 类时,此时,它抛出一个 java.lang.ClassNotFoundException 异常。第二类问题发生在到了您正试图使用的类,但没有到它所导入的某个类时。本例中,在编译时显示了所导入的类,但在运行时,所导入的类没有包含在类路径中。这将抛出一个 java.lang.NoClassDefFoundError 异常。还有另一种考虑 NoClassDefFoundError 的方式,也就是说,在编译当前执行的类时,所搜索的类定义是存在的,但在运行时却再也无法到该定义了
如何可以解决这类问题呢?首先,检查类路径,验证库是否真正位于您认为的地方。例如,在 Windows 中使用该命令来输出类路径:
C:\my_dir>echo %CLASSPATH%
c:\Cloudscape_10.0\lib\cs.jar;c:\Cloudscape_10.0\lib\cstools.jar
然后,在 CLASSPATH 变量中查看每个路径,并用 dir (Windows)或 ls (UNIX)命令查看这些文件是否存在。
如果不知道类位于哪个 jar 文件中,可以用以下命令来检查:
jar -tvf cs.jar | more
该命令产生许多输出。如果正使用 Linux 或 Unix,或者在 Windows 中使用 UNIX 使用程序,那么您可以用 grep 筛选您所查的类。例如,以下命令将查 com.ls.sysinfo 类:
C:\Cloudscape_10.0\lib>jar -tvf cs.jar | grep -i com.ls.sysinfo
然后,在 CLASSPATH 变量中查看每个路径,并用 dir (Windows)或 ls (UNIX)命令查看这些文件是否存在。
如果不知道类位于哪个 jar 文件中,可以用以下命令来检查:
jar -tvf cs.jar | more
该命令产生许多输出。如果正使用 Linux 或 Unix,或者在 Windows 中使用 UNIX 使用程序,那么您可以用 grep 筛选您所查的类。例如,以下命令将查 com.ls.sysinfo 类:
C:\Cloudscape_10.0\lib>jar -tvf cs.jar | grep -i com.ls.sysinfo
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论