Tôi có một lớp Java có một chính và tôi đã từng chạy như một ứng dụng độc lập từ dòng lệnh, ví dụ:
java -jar myjar.jar params
Tôi cần đóng gói lại mã để chạy trong apache và tất cả mã của tôi, bao gồm cả lớp điểm nhập từ jar cũ, đã kết thúc trong một tệp WAR để dễ dàng chuyển vào máy chủ web.
Tuy nhiên, tôi vẫn muốn có thể chạy nó từ dòng lệnh và mã không thay đổi và tất cả đều ở đó, tôi chỉ không thể tìm ra cách làm cho nó chạy.
Đây là những gì tôi đã thử ...
Tôi cho rằng CHIẾN TRANH chỉ giống như một cái lọ, vì vậy
java -jar mywar.war params
Điều đó không thành công khi nói rằng không có lớp chính được xác định trong tệp kê khai.
Tôi đã thêm một bản kê khai vào cuộc chiến theo cách thủ công và thử lại, với hiệu ứng tương tự.
Tôi nhận thấy rằng trong cuộc chiến của mình, tôi có một thư mục có tên META-INF chứa tệp kê khai.mf, vì vậy tôi đã thêm một dòng vào phần khai báo lớp chính của mình như cách tôi làm với tệp kê khai bình thường ...
Manifest-Version: 1.0
Main-Class: mypackage.MyEntryPointClass
Điều này đã cho một noClassDefFoundError mypackage.MyEntryPointClass
, đó là tiến bộ của một loại. Điều đó khiến tôi tin rằng đó chỉ là vấn đề về đường dẫn, vì vậy tôi đã thử
Manifest-Version: 1.0
Main-Class: WEB-INF.classes.mypackage.MyEntryPointClass
Bây giờ tôi gặp lỗi tương tự, nhưng với dấu vết ngăn xếp ...
Exception in thread "main" java.lang.NoClassDefFoundError: WEB-INF/classes/mypackage/MyEntryPointClass (wrong name: mypackage/MyEntryPointClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Tôi đã tìm kiếm trên Google một chút nhưng không thể tìm thấy bất kỳ điều gì trả lời cho câu hỏi của tôi và tôi đã đọc một số câu hỏi khác ở đây hơi khác, vì vậy tôi nghĩ tôi sẽ đăng.
Java 1.5, tôi không nghĩ rằng điều đó sẽ tạo ra bất kỳ sự khác biệt nào.