ejecutar desde java jar

java - ejecutar jar desde cmd



Múltiples clases ejecutables dentro de JAR, ¿cómo ejecutarlas? (7)

Tengo problemas para ejecutar varias clases diferentes desde un archivo JAR. Sé que puedo configurar una de las clases dentro de JAR a por Clase principal que se ejecutará después del comando java -jar myjar.jar , pero lo que quiero es algo como:

java -jar myjar.jar MyClass

¿Es posible hacerlo de esta manera, o tengo que crear múltiples JAR (cada uno para una clase ejecutable), o es mejor crear la clase ''manager'' que ejecutará mis otras clases pasándoles los argumentos de la línea de comandos?
Estaba buscando documentación o referencias, pero no pude encontrar ninguna.


¿No le serviría mejor usar una clase principal "Iniciador", cuya función es simplemente enviar las llamadas a las clases del controlador real, y usar un archivo de enlace como envoltorio final, en lugar de jugar con la opción -cp del wm?

En las ventanas, es sorprendentemente fácil hacerlo.

La "clase principal" no tiene por qué ser algo muy complejo, algo así como

/** * Sample launcher */ public class Launcher { /** * @param args */ public static void main(String[] args) throws Exception { if (args != null && args.length > 0) { String option= args[0]; String[] args2=new String[0]; if( args.length>1){ args2= new String[args.length-1]; System.arraycopy(args, 1, args2, 0, args2.length); } if(option.equals("a")); new ClassA().exec(args2); else if(option.equals("b")); new ClassB().exec(args2); } } }

En el lado de las ventanas de las cosas, es suficiente como crear un enlace de este tipo

javaw.exe -jar "jarfile" "a"

Es muy útil para colocar el enlace en la carpeta "sendTo" ... un jar, oculto, llamado por muchos enlaces que activan uno de sus aspectos y simplifica la implementación de actualizaciones de la lógica del jar.

Los archivos reales seleccionados se pasan como una lista de cadenas después de los parámetros en la definición del enlace.

De esta manera, no debe preocuparse por todos los problemas de classpath.


Como se proporcionó la respuesta correcta, hay una solución que podría usar para crear un archivo de código auxiliar para cada clase principal con diferentes manifiestos. Esto le permitiría crear archivos jar ejecutables al permitir hacer doble clic en cada programa por separado.

Hay varias formas de lograr esto, pero lo básico es poner una clase única similar a la siguiente, que invoca el método principal previsto que pasa argumentos.

package com.acme.myapp; public final class Stub1 { public static void main(String[] args) { App1.main(args); } }

En cuanto a empaquetar esto, una forma de utilizar maven sería con el maven-assembly-plugin jar-with-dependencies : jar-with-dependencies -encies mojo. La ventaja aquí es que el mojo creará un tarro para el método principal de destino que es independiente y no necesita tener otros ensamblajes en el classpath. Lo hace copiando el contenido de cada jar de dependencia en el jar resultante.


El formato de archivo jar ejecutable solo le permite especificar una clase principal. Para poder ejecutar diferentes aplicaciones, deberá crear un "administrador" como sugiera, o usar el classpath en su lugar:

java -cp myjar.jar MyClass

Sin embargo, este enfoque ignorará la ruta de clase que ha configurado en el archivo de manifiesto del Jar.


Este doc te ayudará.


Lo haces así:

java -cp myjar.jar MyClass

es decir, poner el JAR en la ruta de clase, entonces cualquier clase con un método principal puede ejecutarse especificando su nombre completo. La opción -jar solo existe como acceso directo para utilizar la información en el manifiesto del JAR en su lugar (que también puede incluir otros JAR en el classpath, así como especificar la clase principal).


Los archivos jar solo pueden contener un atributo de clase principal en el manifiesto, lo que significa que java -jar myjar.jar solo puede iniciar una clase.

Puedes comenzar otras clases ejecutables con

java -cp myjar.jar OtherClass

pero eso no permitirá a los usuarios hacer doble clic en el archivo jar.

Dependiendo de la habilidad de sus usuarios, tal vez la línea de comandos esté bien para ellos. De lo contrario, puede crear un script para cada clase ejecutable o un script que tome argumentos para elegir la clase correcta.


tendrás que usar:

java -cp myjar.jar MyClass

y

java -cp myjar.jar OtherMainClass