2012-02-08 32 views
15

Tôi quan sát hành vi lạ của hành vi mở rộng ký tự đại diện cho Java7 trên Windows.Mở rộng ký tự đại diện bị hỏng cho dòng lệnh Java7 trên Windows (7?)

Trong nhiều thế kỷ, có sự khác biệt rõ ràng giữa "*" so với *.
Dường như điều này không còn đúng đối với Java7 (ít nhất là trên Windows7).

Tôi nhận thấy sự cố khi sử dụng wildcard classpath.
Mặc dù trích dẫn đường dẫn ký tự đại diện được mở rộng.
Vì vậy, có vẻ như không còn khả năng nào để chuyển một ký tự đại diện đến ứng dụng java.

Vì vậy, việc sử dụng java -cp "somewhere/*" sẽ không thành công (cũng như "somewhere\*").

Cách giải quyết có vẻ là: java -cp "somewhere/*;" ngăn cản việc mở rộng.

Để xác minh hành vi, tôi đã viết một lớp Echo.java nhỏ.

Tôi thấy rằng việc sử dụng java 1.6.0 được trích dẫn "*" và đồng bằng * hoạt động như mong đợi, trong khi trên Java7 tôi luôn có ký tự đại diện mở rộng. Cho đến bây giờ điều này đã được quan sát trên Windows7, không biết điều gì xảy ra trên XP.

Sự cố phát sinh, vì các ký tự đại diện trên Windows chưa bao giờ được mở rộng bằng độ tuổi tối thiểu CMD.EXE (giống như bất kỳ shell nào trên UNIX). Thay vào đó, mỗi tệp thực thi phải thực hiện điều này một cách rõ ràng bằng cách sử dụng setargv.obj.

tôi thấy hai vấn đề liên quan mà dường như để mô tả một vấn đề tương tự:

Đây có phải là quan sát bởi người khác?
Hoặc có một số cài đặt Windows hoặc tệp hàng loạt không rõ ràng để kiểm soát điều này không?

Chế độ ăn kiêng.

+1

Nếu bạn đặt biến môi trường '_JAVA_LAUNCHER_DEBUG' trình khởi chạy sẽ hiển thị thông tin bổ sung về mở rộng đường dẫn lớp. Có lẽ nó sẽ giúp hiểu những gì đang xảy ra bên trong java.exe. – Mersenne

+0

liên kết này http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7020954 –

+0

bằng cách sử dụng '_JAVA_LAUNCHER_DEBUG' cũng cho thấy rằng' "*" 'phân rã: java -cp. Echo "*" Dòng lệnh args: argv [0] = C: \ Program Files \ Java \ jdk1.7 \ bin \ java.exe argv [1] = -cp argv [2] =. argv [3] = Echo argv [4] = Echo.class argv [5] = Echo.java – Ditz

Trả lời

7

Có, tôi đã nhận thấy cùng một vấn đề.

  • Giải thích là 'vấn đề đã biết' trong the release notes for Java7 update 4.

  • Here is the bug report. Bản sửa lỗi sẽ được gửi trong bản cập nhật Java7 8 (bản phát hành hiện tại là bản cập nhật 6).

  • Lưu ý rằng không có giải pháp tùy chọn vỏ, bởi vì trong Windows, trình bao không xử lý mở rộng ký tự đại diện. (Trong khi trong Unixes, trình bao thực hiện việc mở rộng).

0

Không phải giải pháp trực tiếp cho vấn đề bị hỏng/* nhưng tôi hy vọng bạn có thể sử dụng tập lệnh sau để giảm bớt tình huống của mình.

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; 

Kịch bản cho Linux, có thể có cửa sổ tương tự cho cửa sổ.Nếu thư mục thích hợp được cung cấp làm đầu vào cho "libDir2Scan4jars"; kịch bản sẽ quét tất cả các lọ và tạo một chuỗi classpath và xuất nó vào một biến env "tmpCLASSPATH".

Các vấn đề liên quan