2011-08-23 34 views
5

Tôi đã xây dựng một bình thực thi bằng cách sử dụng một kịch bản kiến, jar bên ngoài duy nhất tôi đã sử dụng là joda-time 2.0. Kịch bản kiến ​​xây dựng "dường như" để làm việc như tôi đã không nhận được bất kỳ lỗi biên dịch nào, và nếu tôi đã loại bỏ thời gian jode 2.0.jar khỏi thư mục lib thì việc xây dựng sẽ thực sự thất bại như mong đợi. Dù sao đi nữa, sau khi xây dựng jar tôi nhận được lỗi này khi tôi cố gắng chạy với:Ngoại lệ trong chủ đề "chính" java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant

java -jar myapp.jar

Exception in thread "main" java.lang.NoClassDefFoundError: org/Joda/lần/ReadableInstant

Mọi suy nghĩ về điều này? Tôi chỉ không chắc chắn nơi để tìm, tất cả mọi thứ hoạt động tốt trong Eclipse. cảm ơn cho bất kỳ ý tưởng

Trả lời

9

Có lẽ, bình của bạn không chứa manifest header yêu cầu Java thêm lọ thời gian joda vào đường dẫn lớp. Đó là cách duy nhất để có các mục nhập classpath khác khi sử dụng java -jar. Bạn có thể thực hiện việc này trực tiếp với Ant manifest task hoặc có thể có nhiều cách khác để thực hiện việc này, bao gồm xây dựng nó từ classpath hiện có của bạn.

Cách khác, hãy thử

java -cp myapp.jar:joda-time-2.0.jar com.foo.YourMainClass 
2

Trừ khi bạn đang sử dụng một classloader tùy chỉnh hoặc một cái gì đó giống như Jarjar, thì bạn không thể bó lọ bên ngoài bên trong JAR thực thi của bạn. Tệp kê khai của bạn sẽ cần phải liệt kê một classpath, nhưng JVM sẽ tìm các JAR mà bạn liệt kê trong cùng thư mục với tệp JAR thực thi của bạn, chứ không phải bên trong tệp JAR thực thi của bạn.

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