2009-04-02 3 views
16

Tôi đang sử dụng một số lớp từ tệp JAR và chúng thuộc về một gói (com.abc.xyz).Các lớp học cùng gói có thể trải rộng trên nhiều tệp Jar không?

Lớp học viết cũng thuộc về gói đó nhưng tôi sẽ không thể gộp tệp của tôi vào tệp JAR đó. Có thể có các lớp thuộc cùng một gói trải rộng trên nhiều tệp JAR không?

+0

BTW, bạn có thể mô tả tại sao bạn cần phải làm như vậy ? Nó là một thực hành tốt để giữ toàn bộ gói bên trong một cái bình. Nó sẽ là thú vị để xem lý do tại sao bạn không thể. –

+0

Tôi phải làm điều đó (để có thể truy cập, và các lớp con với truy cập "mặc định" trong một Jar không phải của tôi), và nó hoạt động tốt ... – Varkhan

Trả lời

4

Tôi không hiểu tại sao điều đó không thể thực hiện được. Tất cả những vấn đề đó là các lớp nằm trong classpath.

16

Theo mặc định, tuyệt đối.

Tuy nhiên, nếu bạn muốn để đảm bảo rằng các lớp học từ một gói phần mềm đặc biệt là chỉ nạp từ một file jar, bạn có thể add that information to the manifest.

7

Hoàn toàn có thể thực hiện trừ khi JAR có gói sealed.

3

Đây có thể không phải là điều bạn nên làm. Nếu nó trong cùng một gói, nên nó không được đóng gói với nhau (tôi tin rằng Jigsaw dự định cho phép chia tách các gói giữa các mô-đun, nhưng đó là một ấm đun nước khác nhau của cá).

Nó có thể bị chặn nếu một trong hai gói được đánh dấu niêm phong trong tệp kê khai. Tôi khuyên bạn nên đánh dấu toàn bộ lọ như niêm phong như một vấn đề của khóa học.

Nó cũng có thể bị chặn nếu có các ký hiệu khác nhau trên các lớp và các lớp được nạp bởi cùng một trình nạp lớp.

Nếu bạn tải các lớp bằng trình nạp lớp khác nhau, mặc dù "không gian tên" sẽ giống nhau, bạn sẽ không thực sự nhận được quyền truy cập gói (và phần có liên quan).

0

Đôi khi bạn phải làm điều đó nếu bạn muốn mở rộng các chức năng của thư viện của bên thứ ba nhưng họ không mở sourcve và/hoặc bạn không có nguồn