Tôi đã sử dụng các hướng dẫn được tìm thấy tại https://stackoverflow.com/a/5893391/14731 để thêm mục nhập tùy ý vào thuộc tính Class-Path
. Dưới đây là tập tin MANIFEST.MF của tôi:JAR thực thi bỏ qua thuộc tính Class-Path của riêng mình
Manifest-Version: 1.0
Class-Path: jace-runtime.jar
Main-Class: org.jace.examples.Test
tôi xác định org.jace.examples.Test như sau:
public class Test
{
public static void main(String[] args)
{
System.out.println("classpath: " + System.getProperty("java.class.path"));
System.out.println("PeerExample: " + Class.forName("org.jace.util.ShutdownHook"));
}
}
nơi org.jace.util.ShutdownHook
được định nghĩa trong jace-runtime.jar
. Khi tôi gọi java -jar peer_example1.jar
tôi nhận được kết quả như sau:
classpath: peer_example1.jar
ngoại lệ trong chủ đề java.lang.ClassNotFoundException "chính": org.jace.util.ShutdownHook
Nói cách khác, Java được bổ sung thêm file JAR thực thi đến classpath nhưng bỏ qua Class-Path
. Nếu tôi gọi java -cp jace-runtime.jar;peer_example1.jar org.jace.examples.Test
tôi nhận được kết quả mong muốn:
classpath: jace-runtime.jar;peer_example1.jar
Bất kỳ ý tưởng?
Bạn có thể cần ../jace-runtime.jar nếu gốc jar được coi là thư mục làm việc hiện tại. –
@MarkoTopolnik: Tôi vừa thử nó. Nó không hoạt động. – Gili
Nhưng bạn đã thử truy cập một lớp trong bình khác chưa?Có vẻ như java.class.path không phản ánh đường dẫn lớp được đọc từ tệp kê khai. –