我觀察到Windows上Java7通配符擴展行爲的奇怪行爲。Windows上Java7命令行的通配符擴展破壞(7?)
幾個世紀以來,「*」與*之間存在明顯的差異。
似乎這不再適用於Java7(至少在Windows7上)。
我注意到使用wildcard classpath時出現問題。
儘管引用了通配符類路徑,但它得到了擴展。
因此,似乎不再有可能將通配符傳遞給java應用程序。
因此使用java -cp "somewhere/*"
將失敗(與"somewhere\*"
一樣)。
解決方法似乎是:java -cp "somewhere/*;"
它禁止擴展。
要驗證行爲,我寫了一個小的Echo.java類。
我發現使用java 1.6.0引用的「*」和plain *像預期的那樣工作, 而在Java7上我總是得到擴展的通配符。 直到現在這在Windows7上才被觀察到,不知道XP上會發生什麼。
問題出現了,因爲Windows上的通配符永遠不會在黑暗時代CMD.EXE中擴展(就像UNIX上的任何shell一樣)。相反,每個可執行文件必須使用setargv.obj明確執行此操作。
我發現這似乎說明了類似的問題兩個相關的問題:
- Multiple command line wildcard expansion confuses Windows users
- setargv.obj wildcard handling broken
這是別人看到?
或者是否有一些模糊的Windows或批處理文件設置來控制?
Dieter。
如果您設置了環境變量'_JAVA_LAUNCHER_DEBUG',啓動器將顯示有關展開類路徑的其他信息。也許這將有助於瞭解java.exe中發生了什麼。 – Mersenne 2012-02-08 15:03:57
這一個是相關http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7020954 – 2012-02-08 18:40:39
使用'_JAVA_LAUNCHER_DEBUG'還顯示'「*」'衰變: java -cp。回聲「*」 命令行參數: argv [0] = C:\ Program Files \ Java \ jdk1.7 \ bin \ java.exe argv [1] = -cp argv [2] =。 argv [3] =回聲 argv [4] = Echo.class argv [5] = Echo.java – Ditz 2012-02-08 19:16:16