cuốn sách gpt4 ai đã làm

NoClassDefFoundError khi chạy ứng dụng trên Linux (nhưng không phải trên Mac)

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 04:58:05 27 4
mua khóa gpt4 Nike

Tôi đã tạo một ứng dụng tự động tải xuống dữ liệu thời tiết và thêm dữ liệu này cho một vị trí cụ thể vào cơ sở dữ liệu. Ứng dụng hoạt động như mong đợi trong IntelliJ

Bây giờ tôi muốn chạy ứng dụng này dưới dạng ứng dụng độc lập. Vì vậy, tôi đã tạo một cái bình bằng Maven. Bình này là một bình "tối thiểu" không có tất cả các phụ thuộc. Các phụ thuộc được xuất ra một thư mụclib. Cấu hình plugin maven là:

        
org.apache.maven.plugins
maven-jar-plugin



đúng
lib/
nl.wur.fbr.data.weather.WeatherData


${project.build.directory}/WeatherData




org.apache.maven.plugins
maven-dependency-plugin


cài đặt

bản sao phụ thuộc


${project.build.directory}/WeatherData/lib
đúng
đúng
đúng




Đường dẫn lớp được thêm vào danh sách (tôi đã kiểm tra) và tất cả các phụ thuộc đều được xuất ra thư mục lib.

Khi tôi chạy ứng dụng này trên Mac (phiên bản Java 1.8.0), mọi thứ đều hoạt động tốt. Nhưng khi tôi chạy nó trên máy chủ Linux (sau khi nén và giải nén cũng như chạy Java 1.8.0), tôi gặp lỗi sau:

$ java -jar WeatherData-1.0-SNAPSHOT.jar 
Lỗi: Đã xảy ra lỗi JNI, vui lòng kiểm tra cài đặt của bạn và thử lại
Ngoại lệ trong luồng "chính" java.lang.NoClassDefFoundError: nl/wur/fbr/om/factory/InstanceFactory
tại java.lang.Class.getDeclaredMethods0 (Phương thức gốc)
tại java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
tại java.lang.Class.privateGetMethodRecursive(Class.java:3048)
tại java.lang.Class.getMethod0(Class.java:3018)
tại java.lang.Class.getMethod(Class.java:1784)
tại sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
tại sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Nguyên nhân do: java.lang.ClassNotFoundException: nl.wur.fbr.om.factory.InstanceFactory
tại java.net.URLClassLoader.findClass(URLClassLoader.java:381)
tại java.lang.ClassLoader.loadClass(ClassLoader.java:424)
tại sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
tại java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 thêm

Thông thường là sự cố về đường dẫn lớp, nhưng tại sao nó lại hoạt động khác nhau trên macOS và Linux? Tệp jar chính (danh sách chứa đường dẫn lớp) và thư mục lib giống nhau.

câu trả lời hay nhất

Tôi không chắc chính xác điều gì đang gây ra sự cố này nhưng các bước dưới đây có thể giúp thu hẹp đường dẫn. 

Bước 1 : Xác minh tệp lớp nl.wur.fbr.om.factory.InstanceFactory có trong jar

Bước 2: Xác minh tệp MANIFEST.MF và kiểm tra các mục sau -
ví dụ: Lớp chính: nl.wur.fbr.data.weather.WeatherData
Đường dẫn lớp:
../config/
lớp12.jar
bc4jct.jar
bc4jdomorcl.jar
bc4jmt.jar
commons-beanutils-bean-collections.jar
commons-beanutils-core.jar

Bước 3: Xác minh mục jar có trong Đường dẫn lớp

Bước 4: Nếu sự cố vẫn tiếp diễn, hãy thử chạy với tùy chọn java -classpath.

Về java - NoClassDefFoundError khi chạy ứng dụng trên Linux (nhưng không chạy trên Mac), chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/40972834/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress