我观察到 Java7 在 Windows 上的通配符扩展行为有一个奇怪的行为。
几个世纪以来,“*”与 * 之间有着明显的区别。
这似乎不再适用于 Java7(至少在 Windows7 上)。
我在使用 wildcard classpath 时注意到了这个问题.
尽管引用了通配符类路径,它还是被扩展了。
因此似乎不再可能将通配符传递给 java 应用程序。
因此使用 java -cp "somewhere/*"
会失败("somewhere\*"
也会失败)
解决方法似乎是:java -cp "somewhere/*;"
会抑制扩展。
为了验证行为,我编写了一个小的 Echo.java 类。
我发现使用 java 1.6.0 引用“*”和普通 * 可以像预期的那样工作, 而在 Java7 上,我总是得到扩展的通配符。 到目前为止,这是在 Windows7 上观察到的,不知道在 XP 上会发生什么。
问题出现了,因为黑暗时代的 CMD.EXE 永远不会扩展 Windows 上的通配符(就像 UNIX 上的任何 shell 一样)。相反,每个可执行文件都必须使用 setargv.obj 显式执行此操作.
我发现了两个相关的问题,它们似乎描述了一个类似的问题:
- Multiple command line wildcard expansion confuses Windows users
- setargv.obj wildcard handling broken
这是被其他人观察到的吗?
或者是否有一些模糊的 Windows 或批处理文件设置来控制它?
节食者。
最佳答案
是的,我注意到了同样的问题。
在 the release notes for Java7 update 4 中将其解释为“已知问题” .
Here is the bug report .修复将在 Java7 更新 8 中提供(当前版本是更新 6)。
请注意,没有 shell 选项解决方法,因为在 Windows 中,shell 不处理通配符扩展。 (而在 Unix 中,shell 执行扩展)。
关于java - Windows(7?)上 Java 7 命令行的损坏的通配符扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9195073/