2014-07-25 29 views
8

Tôi đang tìm một lời giải thích đơn giản về mối quan hệ giữa java.library.path và classpath. Mặc dù tôi hầu như không phải là một newbie, tôi chưa bao giờ phải gây rối với j.l.p. Nhưng chúng tôi đang gặp phải vấn đề với một ứng dụng WebSphere MQ mà tôi tham gia và chúng tôi muốn biến theo dõi của họ. Thật không may, một khi tôi nói với IBM rằng chúng tôi đã đóng gói lại các lọ MQ để chúng tôi có thể triển khai thông qua Maven, họ thậm chí sẽ không nói chuyện với tôi về vấn đề này trừ khi chúng tôi nạp các lọ WebSphere MQ với java.library.path.Mối quan hệ giữa java.library.path và classpath

Tuyệt vời, hãy làm lại toàn bộ chiến lược triển khai của chúng tôi. Tôi không sao khi cắn viên đạn đó, nhưng đây là câu hỏi của tôi:

Mối quan hệ giữa java.library.path và classpath là gì? Các lớp được tìm thấy trên j.l.p có hiển thị với trình biên dịch không? bạn có phải chỉ định j.l.p trên dòng lệnh của trình biên dịch không? Bạn có thể chỉ định các lớp này trên cả j.l.p và classpath không? Được ưu tiên.

Và vui lòng không bum-rap câu hỏi này để không đủ nghiên cứu. Tôi đã tất nhiên googled "java.library.path". Gazillions của số truy cập của khóa học. Tôi đã thử thực hiện tìm kiếm google nâng cao để hạn chế biểu thức trên trang web oracle.com. Vẫn gazillions của số truy cập. Tôi đã thử googling cả hai điều khoản. Nhận nhiều giải thích về chất lượng đáng ngờ của newbie. Tôi đã thử tìm kiếm các đặc tả ngôn ngữ java. Không có lần truy cập nào.

Tôi muốn có giải thích ngắn gọn và có thẩm quyền. Ai đó có thể chỉ cho tôi một?

CẬP NHẬT - IBM khẳng định rằng cơ sở theo dõi MQ của họ sẽ không hoạt động trừ khi tôi tải ứng dụng của mình bằng -Djava.library.path = {path to MQ jars} và họ thậm chí sẽ không hỗ trợ tôi mặc dù có hợp đồng dịch vụ trừ khi tôi làm theo cách này. Tuy nhiên, tất nhiên, tôi có mã tham khảo các lớp này và phải biên dịch. Đây là động lực đằng sau câu hỏi này.

Trả lời

10

Mối quan hệ giữa java.library.path và classpath là gì?

Không, điều duy nhất họ có điểm chung là cả hai đều là đường dẫn.

Các lớp học có được tìm thấy trên j.l.p hiển thị với trình biên dịch không?

số

làm bạn phải xác định j.l.p trên dòng lệnh của trình biên dịch?

Không bao giờ. Bạn chỉ cần điều này khi chạy.

Bạn có thể chỉ định các lớp này trên cả j.l.p và classpath không?

Chỉ đặt các lớp học trên đường dẫn lớp học.

Các j.l.p tương đương với LD_LIBRARY_PATH và kể OpenJDK/HotSpot JVM nơi để tìm chia sẻ thư viện nguồn gốc như .DLL hoặc .so không lọ, không lớp.

http://examples.javacodegeeks.com/java-basics/java-library-path-what-is-it-and-how-to-use/

+0

Cảm ơn bạn đã liên kết, Peter. Tôi nghĩ rằng các lọ MQ, ít nhất một số trong số họ, là mã nguồn gốc (các lớp MQ cho java là một wrapper xung quanh C), vì vậy điều này có thể là thích hợp. Tuy nhiên, tôi đã chạy chúng từ classpath trong nhiều năm, không có vấn đề gì, cho đến khi tôi phải bật thiết bị theo dõi này. –

+1

Bạn không thể tải một JAR như một thư viện gốc, hệ điều hành sẽ không hỗ trợ điều đó. Bạn có thể đặt một thư viện riêng bên trong một JAR nhưng cách duy nhất để tải nó là trích xuất nó vào hệ thống tập tin, và sau đó tải nó, thường là rõ ràng với System.load(). Có thể các thư viện MQ sử dụng tệp java.library.path theo cách mà nó không được dự định. tức là một thư viện có thể phân tích cú pháp và sử dụng tài sản cho bất kỳ thứ gì nó thích. –

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