【发布时间】:2014-05-15 16:18:49
【问题描述】:
我注意到javac 和java 选项的大小写敏感性似乎有所不同。例如:
区分大小写的javac 命令选项?
-cp Yes
-sourcepath Yes
-d No
区分大小写的java 命令选项?
-cp No
作为这四个选项区分大小写的示例,采用以下文件夹结构:
project \ src \ Main.java
\ subf \ Sub.java
\ bin \ Main.class
\ subf \ Sub.class
Main.java,显示正在使用的 Sub 类 -
class Main {
public static void main(String[] args) {
subf.Sub.method();
}
}
另外,使用以下批处理文件,它使用javac 和java:
javac -cp bin -sourcepath src -d bin src\Main.java
java -cp bin Main
如果我删除了这个项目中所有预编译的.class文件,并将名为subf的源代码子文件夹重命名为SUBF,那么当我运行上面的批处理文件时,我会得到一个编译错误,因为它可以'找不到名为subf 的包。所以,javac 的-sourcepath 选项区分大小写。
(为了使下一个测试成功并运行,需要将现有的Sub.class 文件移回bin\subf 文件夹。)如果我将重命名的源代码subf 文件夹保留为SUBF ,使源代码无法编译,并将名为subf的bin类文件夹重命名为SUBF,然后当我运行批处理文件时,编译时出现错误(can't find package subf),但可执行文件运行正常。所以,javac 的 -cp 选项区分大小写,但 java 的 -cp 选项不区分大小写。 (请注意,根据此 SO 问题的标题,此观察构成了我的问题的基础。)
最后,如果我将源代码SUBF文件夹重命名为subf,这样可以编译源代码,但将名为subf的类文件夹保留为SUBF,那么当我运行批处理时文件,我没有收到任何错误 - 批处理文件编译并运行。这意味着javac 的-d 选项不区分大小写,因为它忽略了类subf 文件夹已重命名为SUBF 的事实,因为在该文件夹中找到的.class 文件有一个向上到日期时间戳值。
我已将这个简单的项目压缩到下载中。可以在here(在 DropBox 上)找到它。
【问题讨论】:
标签: java classpath javac case-sensitive