2012-06-01 35 views
6

Tôi đang chạy một kịch bản shell đó là nghĩa vụ phải thực hiện một phương pháp main:Sử dụng ký tự đại diện trong java classpath

java -classpath /path/to/app/conf/lib/nameJar* com.example.ClassTest 

Trong thời điểm này tôi có được ngoại lệ này:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext 
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:303) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 

Điều này là do mùa xuân lọ được đặt trong một thư mục khác. Vì vậy, tôi đã thay đổi tập lệnh:

java -classpath /path/to/app/conf/lib/nameJar*:/path/to/app/lib/spring* com.example.ClassTest 

Nhưng với tập lệnh này, bạn không thể tìm thấy com.example.ClassTest. Bất kỳ ý tưởng nào về vấn đề này?

Cảm ơn trước

Trả lời

10

Các java classpath mở rộng ký tự đại diện là bất thường .

Từ docs:

đường dẫn lớp Hiểu kí tự đại diện

mục đường Class có thể chứa các basename ký tự đại diện nhân vật *, vốn được xem là tương đương với xác định một danh sách tất cả các tập tin trong thư mục có phần mở rộng .jar hoặc .JAR. Ví dụ: mục nhập đường dẫn lớp foo/* chỉ định tất cả các tệp JAR JAR trong thư mục có tên foo. Mục nhập classpath bao gồm chỉ đơn giản là * mở rộng danh sách tất cả các tệp jar trong thư mục hiện tại.

Vì vậy, những gì bạn cần phải xác định là:

java -classpath /path/to/app/conf/lib/*:/path/to/app/lib/* 

Nếu bạn chỉ cần lọ cụ thể, bạn sẽ cần phải thêm từng. Chuỗi classpath không chấp nhận ký tự đại diện chung chung như nameJar*, *.jar, spring*, vv

đọc Setting multiple jars in java classpath để biết thêm thông tin.

0

dường như JVM không thể tìm thấy JARS liên quan đến Spring. Đặt tất cả các lọ cần ở một địa điểm (ví dụ c: \ libs) và sử dụng "java.ext.dirs" khi runing "java" lệnh

như:

java -Djava.ext.dirs=c:/libs com.example.ClassTest 
+1

Tôi sẽ không sử dụng 'java.ext.dirs' cho các lọ bình thường thuộc về classpath. –

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