运行JAR文件而不直接调用`java`

我正在部署一个用Java编写的接受命令行参数的命令行工具。 我把它打包成一个JAR文件,因为有一个文件很方便。

问题是要运行它,你必须首先调用java -jar (filename) (args) ,这是很烦人的。

目前我拥有它的方式是有一个简单的bash脚本启动它,但这不是理想的。

无论如何(在Linux,Ubuntu服务器)有一个JAR文件调用自己的Java虚拟机? 我找了一个shebang,但找不到一个(这当然是有道理的,因为它是编译代码)。

这是我想要做的: myprogram.jar arg1 -arg2而不是: java -jar myprogram.jar arg1 -arg2

谢谢,
布赖恩

Solutions Collecting From Web of "运行JAR文件而不直接调用`java`"

请参阅Linux coreel文档中的Documentation / java.txt,该文档告诉您如何使用binfmt_misc内核模块自动运行Jar文件来配置系统。 但是,这是在计算机上更改的配置选项,而不是您对jar文件所做的更改,所以它不会跟随系统之间的jar文件。

.zip文件格式(基于.jar格式的文件格式)似乎在存在文件前缀的额外数据的情况下是健壮的。 因此,如果使用cat命令将压缩数据放在jar文件之前,并使文件可执行,那么可以调用jar文件,就像调用任何普通的shell脚本一样。

例如:(请注意, unzip -l命令只是为了说明这一点,它不会改变任何有关.jar的内容,在实际执行此过程时可以省略)。

 [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 

在基于debian的发行版中,可以安装jarwrapper

 sudo apt-get install jarwrapper 

我认为可以通过使用相同的软件包名称进行安装来在其他发行版上执行相同的操作。