Java là một trong những ngôn ngữ lập trình mà tôi lựa chọn. Tôi luôn gặp phải vấn đề mặc dù phân phối ứng dụng của mình cho người dùng cuối.
Cung cấp cho người dùng một JAR không phải lúc nào cũng thân thiện với người dùng như tôi muốn và sử dụng Java WebStart yêu cầu tôi duy trì một máy chủ web.
Cách tốt nhất để phân phối a Java là gì? Nếu ứng dụng Java cần cài đặt các tạo phẩm vào máy tính của người dùng thì có tốt không Java hệ thống cài đặt/đóng gói ngoài kia?
Có nhiều giải pháp, tùy thuộc vào yêu cầu phân phối của bạn.
Chỉ cần sử dụng một cái lọ. Điều này giả định rằng người dùng đã cài đặt đúng Java, nếu không, người dùng sẽ nhận được các ngoại lệ "phiên bản định dạng tệp lớp". Điều này tốt cho phân phối nội bộ trong một công ty.
Sử dụng launch4j và trình cài đặt như NSIS. Điều này mang lại cho bạn nhiều quyền kiểm soát hơn, mặc dù người dùng vẫn có thể làm những việc ngu ngốc như không cài đặt thời gian chạy Java. Đây có lẽ là cách tiếp cận phổ biến nhất và những gì tôi hiện đang sử dụng.
Sử dụng Webstart. Điều này cũng giả sử rằng người dùng đã cài đặt đúng Java, nhưng sẽ dễ dàng hơn rất nhiều. Kinh nghiệm của tôi là điều này tốt cho môi trường mạng nội bộ được kiểm soát chặt chẽ, nhưng trở nên đau đớn hơn triển khai vì nó có một số thất bại kỳ lạ. Nó có thể trở nên tốt hơn với công nghệ trình cắm mới trong Java 1.7.
Sử dụng trình biên dịch mã gốc như Excelsior JET và phân phối dưới dạng thực thi hoặc gói nó trong trình cài đặt. Đắt tiền và nói chung nó liên kết bạn với một phiên bản Java cũ hơn một chút và có một chút khó khăn với việc tải lớp động, nhưng nó rất hiệu quả để triển khai quy mô lớn, nơi bạn cần giảm thiểu các rắc rối hỗ trợ của mình.
trình cài đặt nâng cao giúp bạn dễ dàng đóng gói Java ứng dụng dưới dạng các tệp thực thi của Windows và nó khá linh hoạt theo cách bạn có thể thiết lập nó. Java ứng dụng cho máy khách windows, đây là cách dễ nhất để đi.
JSmooth là một chương trình đơn giản lấy jar của bạn và gói nó trong một tệp thực thi windows tiêu chuẩn. Nó đi kèm với một GUI đơn giản cho phép bạn định cấu hình JVM cần thiết, gói nó với ứng dụng hoặc cung cấp một tùy chọn để tải xuống nếu nó chưa được cài đặt. Bạn có thể gửi tệp exe như nguyên bản hoặc Zip với các phụ thuộc có thể (hoặc để chương trình tải xuống các phụ thuộc bổ sung từ mạng khi khởi động). Nó cũng miễn phí, như trong bia và lời nói, có thể (hoặc không) là một điều tốt.
Nó phụ thuộc vào mức độ tinh vi của người dùng mục tiêu của bạn. Trong hầu hết các trường hợp, bạn muốn tách biệt chúng khỏi thực tế là bạn đang chạy một ứng dụng dựa trên Java. Cung cấp cho họ một trình cài đặt riêng thực hiện đúng (tạo các mục trình đơn bắt đầu, trình khởi chạy, đăng ký với chương trình thêm/xóa, v.v.) và đã gói a Java runtime (vì vậy người dùng không cần phải biết hoặc quan tâm đến nó). Tôi muốn đề xuất công cụ cài đặt đa nền tảng của chúng tôi, BitRock InstallBuilder . Mặc dù nó không dựa trên Java, nhưng nó thường được sử dụng để gói Java. Nó có thể dễ dàng tích hợp với Ant và bạn có thể xây dựng các trình cài đặt Windows từ Unix/Linux/Mac và theo cách khác. Bởi vì các trình cài đặt được tạo là bản địa, chúng không yêu cầu bước tự giải nén hoặc JRE đã có mặt trong hệ thống đích, có nghĩa là các trình cài đặt nhỏ hơn và giúp bạn đỡ đau đầu. Tôi cũng muốn đề cập đến việc chúng tôi có giấy phép miễn phí cho các dự án nguồn mở
tệp thực thi là tốt nhất nhưng chúng bị giới hạn nền tảng, tức là sử dụng gcj: http://gcc.gnu.org/Java/ cho linux để tạo tệp thực thi và sử dụng launch4j: http: // launch4j .sourceforge.net / để tạo các tệp thực thi của windows. Để đóng gói trên linux, bạn có thể sử dụng bất kỳ gói/vòng/phút nào. Để thử win32 http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System
Nếu đó là một ứng dụng người dùng cuối thực sự có GUI, bạn nên bỏ qua làn đường mà bạn đã viết chương trình (Java) và sử dụng trình cài đặt gốc cho mỗi nền tảng bạn đã chọn. Mac folks muốn có một .dmg và trên windows, trình cài đặt .msi hoặc .exe là cách để sử dụng. Trên Windows, tôi chỉ thích NSIS từ NullSoft vì nó ít phản đối hơn InstallShield hoặc InstallAnywhere. Trên OSX, bạn có thể tin tưởng vào JVM đã có ở đó. Trên Windows, bạn sẽ cần kiểm tra và cài đặt nó cho họ nếu cần thiết. Người Linux sẽ không chạy Java ứng dụng GUI và một số ít sẽ biết phải làm gì với một tệp .jar thực thi.
Mặc dù tôi chưa sử dụng NSIS (Hệ thống trình cài đặt tập lệnh Nullsoft), có các tập lệnh cài đặt sẽ kiểm tra xem JRE được yêu cầu có được cài đặt trên mục tiêu hay không hệ thống.
Nhiều tập lệnh mẫu có sẵn từ Ví dụ về mã và Trình cài đặt trong Thế giới thực trang, chẳng hạn như:
(Xin lưu ý rằng tôi thực sự chưa sử dụng bất kỳ tập lệnh nào, vì vậy vui lòng không xem nó như một sự chứng thực.)
Tôi cần một cách để đóng gói dự án của tôi và các phụ thuộc của nó vào một tệp jar duy nhất.
Tôi đã tìm thấy những gì tôi cần bằng cách sử dụng plugin Maven2 hội: Plugin Maven2 hội
Điều này dường như nhân đôi chức năng của one-jar , nhưng không yêu cầu cấu hình bổ sung để thực hiện.
Đối với đơn giản Java ứng dụng tôi muốn sử dụng Jar. Rất đơn giản để phân phối một tệp mà người dùng có thể chỉ cần nhấp vào (Windows) hoặc
Java -jar jarname.jar
IMHO, jar là con đường để đi khi sự đơn giản là một yêu cầu chính.
Tôi phát triển các ứng dụng RCP của Eclipse. Thông thường để khởi động một ứng dụng Eclipse, một trình khởi chạy thực thi được bao gồm. Tôi bao gồm Java máy ảo bên trong thư mục ứng dụng trong thư mục con/jre để đảm bảo rằng phiên bản Java sẽ được sử dụng.
Sau đó, chúng tôi gói với Cài đặt Inno để cài đặt trên máy của người dùng.
Cách tốt nhất để phân phối ứng dụng Java là gì? Điều gì xảy ra nếu ứng dụng Java cần cài đặt các tạo phẩm vào máy tính của người dùng? Có bất kỳ hệ thống cài đặt/đóng gói Java nào tốt không?
Theo kinh nghiệm của tôi (từ đánh giá một số tùy chọn ), install4j là một giải pháp tốt. Nó tạo ra các trình cài đặt riêng cho bất kỳ nền tảng nào và đặc biệt hướng tới việc cài đặt các ứng dụng Java. Để biết chi tiết, xem " Tính năng " trên trang web của mình.
install4j là một công cụ thương mại, mặc dù. Đặc biệt nếu nhu cầu của bạn tương đối đơn giản (chỉ cần phân phối một ứng dụng và cài đặt một số tạo phẩm), nhiều tùy chọn tốt khác tồn tại, bao gồm cả những tùy chọn miễn phí (như izPack hoặc đã được đề cập Lauch4j ) . Nhưng bạn đã hỏi cách tốt nhất và theo hiểu biết hiện tại của tôi, install4j là cách tốt nhất, đặc biệt là để phân phối lớn hơn hoặc phức tạp hơn Java (EE ) ứng dụng.
Theo quan điểm của tôi, cơ chế phân phối ưu việt là sử dụng một cái gì đó như ClickOnce hoặc WebStart công nghệ. Bạn chỉ cần triển khai phiên bản đến máy chủ và nó sẽ tự động đến máy khách khi phiên bản được phát hành. Ngoài ra, nền tảng RCP của Eclipse chứa UpdateManager thực hiện những gì WebStart làm, nhưng cũng nhiều hơn thế.
Vì tôi đang sử dụng Maven2 để xây dựng, việc triển khai chỉ là một miếng bánh: sao chép tệp được xây dựng vào vị trí trên máy chủ, cập nhật tệp jnlp nếu cần và bạn đã hoàn tất.
cài đặt ở mọi nơi là tốt nhưng đắt tiền - tôi chưa tìm thấy (như) tốt miễn phí