Làm thế nào một trò chơi Java trên máy tính để bàn có thể được phân phối mà không phụ thuộc vào thời gian chạy Java?


9

Có thể biến một ứng dụng Java thành một gói độc lập chạy "ra khỏi hộp" không? Không nên yêu cầu người dùng cuối để cài đặt bất kỳ JRE Java nào, cũng như trình cài đặt có chứa JRE và cài đặt nó cho người dùng.

Bản phân phối cuối cùng phải chứa một tệp thực thi riêng (hy vọng một bản cho mỗi Windows, Mac và Linux) cùng với các tệp dữ liệu thông thường và bất kỳ tệp JAR bổ sung nào nếu cần. Tôi không tìm kiếm một giải pháp "một tệp" cụ thể - tôi thực sự muốn các tệp dữ liệu không bị ảnh hưởng.

Điều này có thể giải quyết như thế nào?

Câu trả lời:


8

Điểm chính là người dùng cuối không cần phải cài đặt bất kỳ JRE Java nào, cũng như trình cài đặt có chứa JRE và cài đặt nó cho người dùng

Bạn có thể sử dụng mã nguồn / mã byte Java để biên dịch mã máy. Có Excelsior JET cho Windows và Linux (yêu cầu giấy phép) và GNU Compiler cho Java đã cũ.

Nếu bạn có thể chứa Java với trò chơi của mình mà không cần cài đặt nó, thì bạn có thể đóng gói Java Runtime với trò chơi của mình và sử dụng tập lệnh bắt đầu để đặt JAVA_HOMEvào vị trí JRT của bạn trước khi khởi chạy trò chơi.

EDIT: (phản hồi bình luận) Sử dụng tùy chọn thứ hai, bạn vẫn sẽ cần các bản dựng khác nhau cho các nền tảng khác nhau bằng cách sử dụng thời gian chạy Java phù hợp cho nền tảng đó.

EDIT2: Aslo xem bình luận gần đây của Dmitry.


3
Nếu trò chơi của bạn là phi thương mại, bạn có thể nhận được giấy phép Excelsior JET miễn phí .
Dmitry Leskov

Tùy chọn thứ hai nghe có vẻ tốt, nhưng nếu tôi đóng gói Windows JRE của mình, nó có phải là nền tảng chéo không? Tương tự với Excelsior, tôi có cần chạy trình biên dịch như vậy trên ba hệ điều hành khác nhau không?
leokhorn

1
Bạn sẽ cần gói JRE nền tảng đó với mỗi bản phát hành, nhưng về cơ bản, nó sẽ vẫn là các nền tảng chéo.
Derek

1
@leokhorn Tại một số điểm, phải có mã gốc. Hoặc bạn phải biên dịch thành mã gốc hoặc bạn phải chạy trên máy ảo gốc. Không có kế hoạch C.
Adrian

1
Hiện tại, GCJ đã chính thức bị khai tử , trong khi Excelsior JET Standard Edition cũng trở nên miễn phí cho mục đích thương mại , mặc dù nếu mối quan tâm duy nhất của bạn là dễ phân phối, có nhiều lựa chọn thay thế
Dmitry Leskov

1

Đối với Mac, xem tài liệu Oracle để đóng gói ứng dụng Java cho Mac . Họ đã thiết lập Java 7 để bạn có thể gói thời gian chạy vào gói ứng dụng chứa các tệp jar của bạn (.app là một thư mục được coi là thực thi thực sự), được yêu cầu để phân phối trên Mac App Store. Về cơ bản, gói .app thực hiện gần giống như câu trả lời JAVA_HOME của Eren gợi ý, nhưng được đóng gói dưới dạng ứng dụng Mac "bản địa".

Để phân phối mà không có Mac App Store, bạn có thể thoát khỏi việc không ký ứng dụng, nói với người dùng Mountain Lion của bạn rằng họ có thể đi xung quanh Gatekeeper bằng cách nhấp chuột phải (hoặc nhấp vào ctrl +) trên ứng dụng của bạn và nhấp vào "Mở" khi họ đầu tiên mở ứng dụng. Điều này vẫn sẽ cảnh báo họ rằng ứng dụng chưa được ký, nhưng nó sẽ cho phép họ mở nó bằng mọi cách, và sau đó cho phép họ nhấp đúp chuột vào ứng dụng để mở lần sau.

(lưu ý bên lề: bạn cũng có thể thoát khỏi việc đánh dấu các tập lệnh shell theo kiểu Linux là có thể thực thi được và sau đó xây dựng một gói .app xung quanh đó. NetBeans thực hiện điều này trên Mac và Linux, mặc dù không có JRE / JDK đi kèm)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.