Windows(7?) 上 Java7 命令行的通配符扩展中断

我在Windows上观察到Java7的通配符扩展行为的奇怪行为。

几个世纪以来,“*”和“*”之间存在着明显的差异。
似乎对于Java7来说(至少在Windows7上)不再如此。

我在使用通配符类路径时注意到了这个问题。
尽管引用了通配符类路径,但它还是得到了扩展。
因此,似乎再也不可能将通配符传递给 java 应用程序了。

因此,使用将失败(就像)。java -cp "somewhere/*""somewhere\*"

解决方法似乎是:这会抑制扩展。java -cp "somewhere/*;"

为了验证行为,我编写了一个小的 Echo.java类。

我发现使用java 1.6.0引用“*”和普通*的工作原理与预期一样,而在Java7上,我总是得到扩展的通配符。直到现在,这在Windows7上观察到,不知道XP上发生了什么。

问题出现了,因为Windows上的通配符永远不会被黑暗时代的CMD扩展.EXE(就像UNIX上的任何shell一样)。相反,每个可执行文件都必须使用 setargv.obj 显式执行此操作。

我发现了两个相关的问题,它们似乎描述了类似的问题:

这是其他人观察到的吗?
还是有一些晦涩难懂的Windows或批处理文件设置来控制这一点?

节食者。


答案 1

是的,我注意到同样的问题。


答案 2

不是损坏的 /* 问题的直接解决方案,但我希望您可以使用以下脚本来缓解您的情况。

 libDir2Scan4jars="../test";cp=""; for j in `ls ${libDir2Scan4jars}/*.jar`; do if [ "$j" != "" ]; then cp=$cp:$j; fi; done; echo $cp| cut -c2-${#cp} > .tmpCP.tmp; export tmpCLASSPATH=`cat .tmpCP.tmp`; if [ "$tmpCLASSPATH" != "" ]; then echo .; echo "classpath set, you can now use  ~>         java -cp \$tmpCLASSPATH"; echo .; else echo .; echo "Error please check libDir2Scan4jars path"; echo .; fi; 

为Linux编写脚本,也可以为Windows提供类似的脚本。如果提供了正确的目录作为“libDir2Scan4jars”的输入;该脚本将扫描所有jar并创建一个类路径字符串并将其导出到env变量“tmpCLASSPATH”。


推荐