【发布时间】:2016-11-24 02:36:43
【问题描述】:
我有一个简单的 Java 程序,可以打印出我的类路径。文件夹结构如下:
[~/tmp/bin]# ls
launcher/ PrintClasspath.class*
还有一个同级别的副本。
[~/tmp/bin/launcher]# ls
PrintClasspath.class*
当我跳转到我的~/tmp 目录并在我的~/tmp/bin 目录中运行PrintClasspath 时,我可以正常运行程序,将./bin 声明为类路径。
[~/tmp]# java -cp "./bin" PrintClasspath
/C:/Cygwin/home/user/tmp/bin/
或者,如果我按如下方式编辑类路径,我可以运行嵌套在 ~/tmp/bin/launcher 目录中的同一个文件:
[~/tmp]# java -cp "./bin/launcher" PrintClasspath
/C:/Cygwin/home/user/tmp/bin/launcher/
但是当我尝试坐在我的~/tmp 目录中,并尝试在~/tmp/bin/launcher 目录中运行我的类时,./bin 作为我的类路径并通过以下方式限定类的位置:
[~/tmp]# java -cp "./bin" launcher.PrintClasspath
Error: Could not find or load main class launcher.PrintClasspath
它失败了。我已经在我的 Linux 机器上运行了相同的测试,并且在为类路径提供多个目录之后限定类位于子目录中的位置可以正常工作。
我最初认为这是 Windows/Cygwin 的细微差别,但我在 Windows 命令提示符下尝试了相同的练习并得到相同的结果。我在这里缺少什么。我只需要使用完全限定的类路径运行我的 Windows Java 程序吗?
【问题讨论】:
标签: java linux windows cygwin classpath