2011-01-21 29 views
7

Tôi cần sử dụng các lọ bổ sung trong khi thực hiện chương trình. Tôi tự thêm các lọ vào thư mục tương đối ./lib và sau đó thực hiện chương trình. Làm thế nào tôi nên xác định classpath trong file manifest?Làm thế nào để sử dụng biểu thức chính quy trong classpath java manifest?

+0

Tôi đã nhận được giải pháp! Tôi sẽ bao gồm các biến như: Đường dẫn lớp: lib/externaljar1.jar lib/externaljar2.jar v.v. tối đa 5 hoặc 10 giá trị. Sau đó, trong khi bao gồm cả lọ trong thời gian chạy, bệnh chỉ cần đổi tên nó như externaljar1, externaljar2 vv và sao chép nó vào thư mục lib. ;-) – Suraj

+0

Tôi cảm ơn mọi người đã trả lời câu hỏi của tôi. Cảm ơn rất nhiều! – Suraj

Trả lời

11

Bạn không thể sử dụng cụm từ thông dụng hoặc các ký tự đại diện khác trong thuộc tính Class-Path của tệp kê khai của mình.

Chỉ có một ký tự đại diện được hỗ trợ trong Java và chỉ hoạt động nếu được chỉ định trên dòng lệnh trên lời gọi "thủ công" java (tức là không sử dụng -jar): using directoryname/*.

+0

Có cách nào khác ngoài việc sử dụng lệnh -cp hoặc hàm nạp lớp không? – Suraj

+0

@Suraj: hỏi về các cách tiếp cận khác mà không nói cho chúng tôi biết tại sao những cách tiếp cận đó không tốt cho bạn ... thay vì vô nghĩa. Và cá nhân, tôi thấy nó khá thô lỗ. –

+0

Xin lỗi về điều đó! Trên thực tế tôi đang lập trình mã cho một cách tiếp cận thân thiện với người dùng và triển khai tương tự trong một jar thực thi. Nó là để có một cơ sở dữ liệu chung nơi người dùng có thể chọn cơ sở dữ liệu của mình. Do đó, anh ta cần chỉ định jar kết nối cần thiết và đặt trong thư mục có thể truy cập chương trình. Tôi nghĩ rằng nếu tôi có thể sử dụng biểu thức chính quy trong classpath manifest như lib/* OR lib/* jar để khi chương trình thực hiện nó tìm thấy tất cả các lọ. – Suraj

2

Tôi không quá chắc chắn về những gì bạn muốn một cách chính xác, nhưng bạn có thể thêm lọ trong thời gian chạy:

  • danh sách (jar) file sử dụng File.list() trên thư mục chứa các lọ
  • làm một regex trên tên tập tin bạn lấy
  • sử dụng một URLClassLoader để tải jar

tôi không biết chính xác làm thế nào để đăng ký (nếu cần thiết) các URLClassLoaders đến classloader chính. Nhưng đó là cách tôi nghĩ tôi sẽ đi.

+2

Bạn không thể sửa đổi trình nạp lớp bootstrap trong spec (có các hacks xấu xí có thể làm điều đó, bằng cách sử dụng 'addURL()'). Giải pháp phù hợp với thông số kỹ thuật là đặt lớp boostrapping vào trong lọ riêng của nó, sử dụng nó để tìm tất cả các lọ khác (bao gồm cả lọ chính "thực") và tải tất cả những thứ đó trong một trình nạp lớp. Sau đó gọi phương thức chính thực từ lớp chính thực sự. –

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