1. 概述

在Java世界中,Classpath 是一个基本概念。当我们编译或启动Java应用时,JVM会查找并加载classpath中的类。

我们可以通过javajavac命令的-cp选项,或者通过CLASSPATH环境变量来定义classpath的元素。无论使用哪种方法设置classpath,都需要遵循classpath的语法。

在这个简短教程中,我们将讨论classpath的语法,特别是Windows和Linux操作系统中的classpath分隔符。

2. 类路径分隔符

classpath的语法其实相当直接:一系列由路径分隔符隔开的路径。然而,路径分隔符本身取决于操作系统。

在Microsoft Windows系统中,使用分号(;)作为分隔符,而在Unix-like系统中则使用冒号(*):

# On Windows system:
CLASSPATH="PATH1;PATH2;PATH3"

# On Linux system:
CLASSPATH="PATH1:PATH2:PATH3"

3. Linux上的误导性手册页面

我们已经了解到,classpath分隔符可能因操作系统而异。

然而,如果我们仔细查看Linux上的Java手册页面,它会告诉你classpath分隔符是分号(;)。

例如,最新版本(ver.17)的OpenJDK的java命令的手册页显示:

--class-path classpath, --classpath classpath, 或 --cp classpath
一系列由分号(*)隔开的目录、JAR存档和ZIP存档,用于搜索类文件。...

在Oracle JDK的官方文档中,我们可以找到相同的文本。

这是因为Java目前仍在使用同一份手册内容供不同系统使用。今年早些时候已经创建了一个相应的bug报告

此外,Java已经在File类的pathSeparatorChar字段中明确文档了路径分隔符是依赖于系统的。

4. 总结

在这篇简短的文章中,我们讨论了不同操作系统下的classpath语法。

我们还讨论了关于Linux上Java手册页面中路径分隔符的bug问题。

我们应该记住,路径分隔符是依赖于操作系统的。在Unix-like系统中使用冒号,而在Microsoft Windows系统中使用分号。


« 上一篇: Java HMAC 使用