run from compile java linux command-line

from - java execute command linux



Ejecutando un archivo JAR sin llamar directamente a `java` (3)

Estoy implementando una herramienta de línea de comandos que está escrita en Java que acepta argumentos de línea de comandos. Lo tengo empaquetado como un archivo JAR porque es conveniente tener un solo archivo.

El problema es que para ejecutarlo, primero debes llamar a java -jar (filename) (args) y eso es bastante molesto.

La forma actual en que lo tengo es tener un simple script de bash que lo inicie, pero esto no es lo ideal.

¿Hay alguna forma (en Linux, Ubuntu Server) para crear un archivo JAR que invoque la máquina virtual Java por sí misma? He buscado un shebang, pero no pude encontrar uno (lo cual, por supuesto, tiene sentido ya que es un código compilado).

Esto es lo que quiero hacer: myprogram.jar arg1 -arg2 lugar de esto: java -jar myprogram.jar arg1 -arg2

Gracias,
Brian


Consulte Documentación / java.txt en la documentación del Kernel de Linux , que le indica cómo configurar un sistema utilizando el módulo del kernel binfmt_misc para ejecutar los archivos Jar automáticamente. Sin embargo, esta es una opción de configuración que cambia en una computadora, no algo que cambia sobre el archivo jar, por lo que no sigue el archivo jar de sistema a sistema.


El formato de archivo .zip (en el que se basa el formato .jar) parece ser sólido en presencia de datos adicionales ante el archivo. Por lo tanto, si usa el comando cat para colocar un shebang antes de los datos zip en el archivo jar y hacer que el archivo sea ejecutable, puede llamar al archivo jar como llamaría a cualquier script de shell normal.

Por ejemplo: (Tenga en cuenta que el comando unzip -l es solo para ilustrar el punto. No cambia nada sobre el .jar y se puede omitir cuando esté haciendo este proceso).

[bloom@cat-in-the-hat ~]$ java -jar tex4ht.jar xtpipes (2009-01-27-22:19) Command line options: java xtpipes [-trace] [-help] [-m] [-E] [-s script_file] [-S script_map] [-i script_dir] [-o out_file] [-x...ml2xml_arg...] (-d in_data | in_file) -m messages printing mode -E error messages into exception calls in_data XML data directly into the command line [bloom@cat-in-the-hat ~]$ cat header.txt #!/usr/bin/java -jar [bloom@cat-in-the-hat ~]$ cat header.txt tex4ht.jar > tex4ht_exe.jar [bloom@cat-in-the-hat ~]$ unzip -l tex4ht_exe.jar Archive: tex4ht_exe.jar warning [tex4ht_exe.jar]: 21 extra bytes at beginning or within zipfile (attempting to process anyway) Length Date Time Name --------- ---------- ----- ---- 0 2009-07-09 15:48 META-INF/ 42 2009-07-09 15:47 META-INF/MANIFEST.MF 0 2009-07-09 15:48 ./ 0 2009-07-09 15:48 tex4ht/ 2217 2009-07-09 15:48 tex4ht/DbUtilities.class 2086 2009-07-09 15:48 tex4ht/GroupMn.class 6064 2009-07-09 15:48 tex4ht/HtJsml.class 4176 2009-07-09 15:48 tex4ht/HtSpk.class 1551 2009-07-09 15:48 tex4ht/JsmlFilter.class 2001 2009-07-09 15:48 tex4ht/JsmlMathBreak.class 6172 2009-07-09 15:48 tex4ht/OoFilter.class 3449 2009-07-09 15:48 tex4ht/OoUtilities.class 1468 2009-07-09 15:48 tex4ht/OomFilter.class 346 2009-07-09 15:48 xtpipes.class 0 2009-07-09 15:48 xtpipes/ 4071 2009-07-09 15:48 xtpipes/FileInfo.class 6904 2009-07-09 15:48 xtpipes/InputObject.class 25906 2009-07-09 15:48 xtpipes/Xtpipes.class 1238 2009-07-09 15:48 xtpipes/Xtpipes$5.class 713 2009-07-09 15:48 xtpipes/Xtpipes$3.class 1533 2009-07-09 15:48 xtpipes/Xtpipes$1.class 709 2009-07-09 15:48 xtpipes/Xtpipes$7.class 1294 2009-07-09 15:48 xtpipes/XtpipesEntityResolver.class 1235 2009-07-09 15:48 xtpipes/Xtpipes$6.class 3367 2009-07-09 15:48 xtpipes/Xtpipes$4.class 709 2009-07-09 15:48 xtpipes/Xtpipes$8.class 1136 2009-07-09 15:48 xtpipes/Xtpipes$2.class 875 2009-07-09 15:48 xtpipes/XtpipesPrintWriter.class 1562 2009-07-09 15:48 xtpipes/XtpipesUni.class 0 2009-07-09 15:48 xtpipes/util/ 5720 2009-07-09 15:48 xtpipes/util/ScriptsManager.class 1377 2009-07-09 15:48 xtpipes/util/ScriptsManagerLH.class --------- ------- 87921 32 files [bloom@cat-in-the-hat ~]$ chmod +x tex4ht_exe.jar [bloom@cat-in-the-hat ~]$ ./tex4ht_exe.jar xtpipes (2009-01-27-22:19) Command line options: java xtpipes [-trace] [-help] [-m] [-E] [-s script_file] [-S script_map] [-i script_dir] [-o out_file] [-x...ml2xml_arg...] (-d in_data | in_file) -m messages printing mode -E error messages into exception calls in_data XML data directly into the command line


En la distribución basada en Debian, es posible instalar jarwrapper

sudo apt-get install jarwrapper

Creo que esto es posible hacer lo mismo en otras distribuciones instalando con el mismo nombre de paquete.