1. 概述
在Java世界中,Classpath
是一个基本概念。当我们编译或启动Java应用时,JVM会查找并加载classpath中的类。
我们可以通过java
或javac
命令的-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系统中使用分号。