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ự:
- Multiple command line wildcard expansion confuses Windows users
- setargv.obj wildcard handling broken
Đâ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.
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
liên kết này http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7020954 –
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