Spanish [Solucionado]Empaquetar ejecutables B4J

Ender1969

Member
Licensed User
Hola,
Soy nuevo en B4X, estoy analizando el comenzar a realizar una aplicación con B4, pero tengo un par de dudas y no me aclaro de encontrarlo en el foro.

Si realizo una aplicación con B4J, cuando creo un paquete autónomo el .exe generado no funciona si no vuelco toda la carpeta de build a un nuevo ordenador.
¿Se puede empaquetar para que esté todo en un .EXE, como en cualquier otro lenguaje (c#) por ejemplo?
He intentado llevarme a una máquina ubuntu el código generado pero no consigo ejecutar el .jar. ¿qué debo copiar para que funcione en ubuntu?

Seguro que son preguntas tontas, pero antes de empezar a fondo me gustaría tener esto claro. Gracias de antemano a todos.
 

josejad

Expert
Licensed User
Longtime User
Hola Ender, bienvenido.
Solo hice este proceso una vez y no recuerdo muy bien, pero si no me equivoco, lo hice siguiendo este tutorial


¿Es el que has seguido tú?

saludos,
 

Ender1969

Member
Licensed User
Gracias por responder tan rápido José,
Esto es para crear un instalador, si no me equivoco. Mas bien me refería a que en lugar de tener que distribuir todas las carpetas y un exe, si era posible que todo se ejecutase desde un .exe, pero no un instalador si no en un archivo ejecutable independiente, al menos para windows.
 

Ender1969

Member
Licensed User
¿Por lo que entiendo, a partir de la versión 8.30 ya está integrado en la opción del IDE Herramientas->Crear un paquete autónomo ?
 

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
Si realizo una aplicación con B4J, cuando creo un paquete autónomo el .exe generado no funciona si no vuelco toda la carpeta de build
Si, tienes que llevar toda la carpeta BUILD para que funcione.

¿Se puede empaquetar para que esté todo en un .EXE,
No, almenos no oficialmente, me imagino que hay herramietnas que concentran todos los dll en un ejecutable o un msi tal vez

He intentado llevarme a una máquina ubuntu el código generado pero no consigo ejecutar el .jar.
Necesitas tener la misma version de JDK con la que compilaste, si compilaste con JDK 11 tienes que tener instalado JDK 11 en ubuntu.
Si tu aplicacion es con interfaz de usuario tienes que asegurarte que el JDK instalado en la maquina del usuario tenga el modulo de Java FX. por default en los repositorios de java no lo trae.
Seguro que son preguntas tontas, pero antes de empezar a fondo me gustaría tener esto claro.
No hay preguntas tontas.
 

Ender1969

Member
Licensed User

Hola Enrique, Justo lo que preguntaba. Gracias...
 

josejad

Expert
Licensed User
Longtime User
Hola:

¿Has probado, como indica el tutorial, a usar Inno Script para crear un ejecutable de instalación? De esa forma creo recordar que empaquetaba todo lo que quieres, puedes ponerle un icono, etc...
 

Ender1969

Member
Licensed User
Hola:

¿Has probado, como indica el tutorial, a usar Inno Script para crear un ejecutable de instalación? De esa forma creo recordar que empaquetaba todo lo que quieres, puedes ponerle un icono, etc...
No, eso lo probaré para la instalación , realmente quería saber si era posible un único ejecutable, sin carpetas, pero en el equipo instalado. Ya veo que no.

Estoy en la fase de elección de lenguaje e IDE, entre B4X que me atrae por ser casi multiplataforma o usar C#.
 

Ender1969

Member
Licensed User

Hola de nuevo,
Pero algo no veo muy lógico o yo estoy espeso (será mas bien esto, entre el inglés y yo, jeje)

Simplemente copiando la carpeta Objects, que se genera al compilar la app (en windows), ese jar es funcional si es una app de consola y al llevarmela a ubuntu funciona.
Cuando hago una app UI, he conseguido que ya no me pida JavaFX, pero no funciona la app.

Veo que siempre se hace referencia a tener que construir la aplicación con B4JPackager11, aunque en algún post veo que ya está incluido en B4J.

Por lo que entiendo es para que se construya un .json, pero el buidin ya lo hace.

@aeric aquí https://www.b4x.com/android/forum/threads/run-jar-in-linux-ejecutar-jar-en-linux.146166/post-926967 entiendo que tengo que recompilar de nuevo en linux
Pero ¿Tengo que compilar b4JPackager 11?
en la línea de inputJar de B4JPackager11, ¿tengo que poner la ruta de mi app o de B4JPackager, la de windows o la de linux?

Como veréis tengo un cacao importante y eso que me leo todos los post...
 

Ender1969

Member
Licensed User
También he probado conectar Ubuntu con Bridge, y la app de consola funciona bien al probarla, pero las de UI, no.

La manera de ejecutarlas es esta
/usr/lib/jvm/java11/bin/java --module-path /usr/lib/jvm/java11/javafx/lib --add-modules ALL-MODULE-PATH -jar Prueba.jar
 
Last edited:

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
Creo que estas mezclando varios conceptos.

carpeta Objects,
No tienes que copiar toda la carpeta Objects, solo necesitas el .jar

Cuando si tienes que copiar toda la carpeta es cuando compilas el .exe con el Internal Packager y no es la carpeta objects, si no la carpeta build

Veo que siempre se hace referencia a tener que construir la aplicación con B4JPackager11, aunque en algún post veo que ya está incluido en B4J.
asi es, se llama internal packager, si encuentras una aplicacion externa, es obsoleta.

Por lo que entiendo es para que se construya un .json, pero el buidin ya lo hace.
Esto ya no se usa

entiendo que tengo que recompilar de nuevo en linux
Pero ¿Tengo que compilar b4JPackager 11?
No

en la línea de inputJar de B4JPackager11, ¿tengo que poner la ruta de mi app o de B4JPackager, la de windows o la de linux?
No uses B4JPackager11

Lo mas sencillo para correr una app en linux es solo compilar el .jar
del lado de linux tienes que tener Java instalado y el modulo de JavaFX y tiene que ser la misma version (java 11) que con la que compilaste.

para que no te sea complicado, no uses los repositorios de Ubuntu, instala un Java que ya tenga el modulo listo. por ejemplo

En esa pagina, selecciona JDK 11, busca linux y selecciona la version FULL

con eso deberia ser suficiente para que puedas correr un jar con UI.
 

Ender1969

Member
Licensed User
No tienes que copiar toda la carpeta Objects, solo necesitas el .jar

Cuando si tienes que copiar toda la carpeta es cuando compilas el .exe con el Internal Packager y no es la carpeta objects, si no la carpeta build
Sí eso entendí, que solo .jar, pero como no me funcionaba estaba copiando todo y después quitar.

asi es, se llama internal packager, si encuentras una aplicacion externa, es obsoleta.
Vale, eso también lo entendí, pero en el otro post me lie con la respuesta de @aeric, pues entendía todo el tiempo que ya no se necesitaba al ser lo que genera B4J y para Windows

No uses B4JPackager11
Entendido.
Es lo que quise hacer reflejar, pues en ningún sitio del foro queda claro que ya está obsoleto el uso del paquete externo, pretendía que @Erel lo confirmara.

Ahora mismo, tal y como comentaba ejecuto, pero trampeando la instalación de javaFX, que no consigo hacerlo si no es copiando el paquete de "Recommended: OpenJDK 11 + OpenJFX 11:" de la instalación de B4J.

Voy a probar esto pues la app de ejemplo de Hola mundo no consigo que funcione con UI

Mil gracias, os mantendré informados
 

Ender1969

Member
Licensed User
@EnriqueGonzalez , Eres un máquina. Gracias.
 
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…