ứng dụng của tôi cần nhiều lọ để hoạt động. Vì nó là một ứng dụng máy tính để bàn, tôi không thể giữ người dùng chịu trách nhiệm cài đặt. Vì vậy, trong kịch bản xây dựng của tôi tôi giải nén các nội dung jars vào thư mục xây dựng của tôi xóa các tập tin manifest, biên dịch phần mềm của tôi và jar nó một lần nữa. Tất cả mọi thứ hoạt động như nó phải là câu hỏi của tôi là có bất kỳ tác dụng phụ lâu dài cho quá trình này?Sáp nhập nhiều lọ vào một bình đơn
Trả lời
Trước đây, có các JAR có nội dung lạ (như trình điều khiển DB2 có chứa com.ibm
và com.IBM
; sau khi giải nén trong hệ thống tệp Windows, hai gói đó sẽ được hợp nhất).
Vấn đề duy nhất bạn cần biết là các lọ đã ký và các tệp khác trong META-INF có thể có cùng tên trong nhiều nguồn JAR.
Một giải pháp đơn giản cho tất cả các vấn đề này là sử dụng One-JAR. Nó cho phép bao bọc một số JAR vào một mà không giải nén chúng, đầu tiên. Và đọc câu trả lời này: Easiest way to merge a release into one JAR file
Nếu một số lọ được ký, bạn sẽ mất chữ ký bằng cách giải nén/đóng gói lại.
Vâng, bạn đang vứt bỏ MANIFEST của các lọ bên thứ ba của bạn, để có thể gây ra vấn đề cho bạn. Ví dụ bạn có thể gây ra các vấn đề bảo mật bằng cách vứt bỏ thuộc tính "Sealed".
Tại sao không chỉ tạo trình cài đặt đơn giản và tập lệnh để khởi chạy ứng dụng của bạn để đặt CLASSPATH chính xác?
Nếu bạn muốn người dùng cuối không khởi động chương trình có nhiều phụ thuộc jar bạn có thể muốn xem Launch4j hoặc Jsmooth (Tôi thích Launch4j). Cả hai đều là các chương trình tạo các tệp thi hành bao bọc các jar (s) và JRE với nhau để cho người dùng cuối nó xuất hiện không khác gì bất kỳ tệp thực thi nào khác.
Một tùy chọn tuyệt vời khác là ProGuard, có thể cũng thu nhỏ và/hoặc làm mờ mã quá.
Nếu nền tảng mục tiêu chính của bạn là Windows desktop, sau đó bạn cũng có thể xem xét việc tạo ra một bản exe Windows từ các lọ của ứng dụng của bạn
One-JAR sẽ thực hiện công việc, và có một phiên bản mới (0,97) mà hỗ trợ các khung công tác như Spring và Guice, mà người dùng hiện đang đóng gói vào lưu trữ One-JAR. Ference Hechler cũng đã làm một số công việc tuyệt vời bên trong Eclipse với trình thủ thuật xuất khẩu Eclipse: chúng tôi đã làm việc cùng nhau trên FatJar/One-JAR mà từ đó công việc Eclipse phát triển và tôi có thể giới thiệu nó như một cách tiếp cận, mặc dù tôi không biết nó xử lý tốt như thế nào trong các khung công tác.
Giải pháp đơn giản hơn (IMO) đang sử dụng Maven's assembly plugin, cũng được mô tả trong một trong các câu trả lời cho một câu hỏi khác được liên kết trong một số previous Q&A. Điều này được cung cấp bạn đang sử dụng Maven (là một công cụ được đề xuất bởi chính quyền của nó) như một công cụ xây dựng.
- 1. Git sáp nhập hotfix vào nhiều chi nhánh
- 2. Nhiều lọ, giải pháp đơn vị bền vững duy nhất?
- 3. Git Sáp nhập chi nhánh vào Master
- 4. Sáp nhập/Gắn thêm Justs vào Haskell
- 5. Git danh sách chi nhánh sáp nhập vào một chi nhánh nhưng không phải vào một
- 6. Oracle sáp nhập hằng vào bảng duy nhất
- 7. Django: sáp nhập đối tượng
- 8. C++ nhiều chức năng thừa kế sáp nhập
- 9. sáp nhập hai dữ liệu
- 10. sáp nhập 'cái enter` selectin vào' Lựa chọn update`
- 11. vấn đề sau khi sáp nhập thạo vào main.exe
- 12. Sáp nhập .net managed dlls
- 13. CSS sáp nhập với PHP
- 14. Ghostscript sáp nhập PDF nén kết quả
- 15. Làm thế nào để bao gồm lọ classpath vào một cái bình trong Ant
- 16. Làm cách nào để trộn các lọ mô-đun vào một cái bình trong Maven2?
- 17. danh sách con sáp nhập trong python
- 18. SVN hợp nhất sáp nhập thêm thứ
- 19. Bảng SQLite với Git sáp nhập
- 20. Crystal Report + SVN sáp nhập chi nhánh
- 21. git sáp nhập chi nhánh trong một kho trống
- 22. MySql: sáp nhập ba bảng cùng
- 23. XSLT sáp nhập/concatenating giá trị của anh chị em các nút của cùng tên vào nút đơn
- 24. sáp nhập hai DataTables trong C#
- 25. sáp nhập hai danh sách trong Haskell
- 26. Mercurial Sáp nhập chỉ những thay đổi nhất định
- 27. Đẩy nhánh sáp nhập không có tiền sử
- 28. Gradle có thể gộp nhiều dự án vào một cái bình?
- 29. maven: lắp ráp dự án nhiều mô-đun vào một cái bình
- 30. Bao gồm nhiều lọ với classpathentry