¿Cómo se puede distribuir un juego Java de escritorio sin una dependencia de tiempo de ejecución Java?

9

¿Es posible convertir una aplicación Java en un paquete independiente que se ejecuta "fuera de la caja"? No se debe exigir al usuario final que instale ningún JRE de Java, ni el instalador debe contener un JRE e instalarlo para el usuario.

La distribución final debe contener un ejecutable nativo (con suerte uno para cada uno de Windows, Mac y Linux) junto con los archivos de datos regulares y cualquier JAR adicional si es necesario. No estoy buscando una solución de "un solo archivo" específicamente: en realidad me gustaría que los archivos de datos no se ofusquen.

¿Cómo se puede hacer esto?

leokhorn
fuente

Respuestas:

8

El punto principal es que el usuario final no debería tener que instalar ningún JRE de Java, ni el instalador debe contener un JRE e instalarlo para el usuario

Puede usar código fuente / bytecode de Java para compilar códigos de máquina. Hay Excelsior JET para Windows y Linux (requiere licencia) y GNU Compiler para Java, que es antiguo.

Si está bien contener Java con su juego sin instalarlo, entonces probablemente pueda empaquetar Java Runtime con su juego y usar un script de inicio para establecer JAVA_HOMEsu ubicación JRT antes de iniciar el juego.

EDITAR: (respuesta de comentario) Usando la segunda opción, aún necesitará diferentes compilaciones para diferentes plataformas usando el tiempo de ejecución de Java apropiado para esa plataforma.

EDIT2: También ver el reciente comentario de Dmitry.

Eren Güven
fuente
3
Si su juego no es comercial, puede obtener una licencia gratuita Excelsior JET .
Dmitry Leskov
La segunda opción suena bien, pero si empaquete mi Windows JRE, ¿es multiplataforma? De manera similar con Excelsior, ¿necesitaría ejecutar tales compiladores en los tres sistemas operativos diferentes?
leokhorn
1
Tendría que agrupar esas plataformas JRE con cada lanzamiento, pero esencialmente seguirá siendo multiplataforma.
Derek
1
@leokhorn En algún momento, tiene que haber código nativo. O tiene que compilar en código nativo, o debe ejecutar en una VM nativa. No hay ningún plan C.
Adrian
1
GCJ ahora está oficialmente muerto , mientras que Excelsior JET Standard Edition también se ha convertido en gratuito para uso comercial , aunque si su única preocupación es la facilidad de distribución, hay muchas alternativas
Dmitry Leskov
1

Para Mac, consulte la documentación de Oracle para empaquetar una aplicación Java para Mac . Han configurado Java 7 para que pueda agrupar el tiempo de ejecución en un paquete de aplicaciones que contenga sus archivos jar (.app es una carpeta tratada como ejecutable realmente), que se requiere para su distribución en Mac App Store. Básicamente, el paquete .app hace casi lo mismo que sugiere la respuesta JAVA_HOME de Eren, pero está empaquetado como una aplicación Mac "nativa".

Para distribuir sin Mac App Store, puede salirse sin firmar la aplicación, diciéndoles a sus usuarios de Mountain Lion que pueden moverse por Gatekeeper haciendo clic derecho (o ctrl + clic) en su aplicación y haciendo clic en "Abrir" cuando Primero abra la aplicación. Esto todavía les advertirá que la aplicación no está firmada, pero les permitirá abrirla de todos modos, y luego les permitirá hacer doble clic en la aplicación para abrirla posteriormente.

(Nota al margen: también podría salirse con la marca de estilo Linux de los scripts de shell como ejecutables y luego construir un paquete .app alrededor de eso. NetBeans hace esto en Mac y Linux, aunque sin un JRE / JDK incluido)

El cangrejo
fuente