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

tvmytwxo  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(425)

我正在部署一个用java编写的接受命令行参数的命令行工具。我将其打包为jar文件,因为使用单个文件很方便。
问题是要运行它,必须首先调用 java -jar (filename) (args) 这很烦人。
我目前的方法是使用一个简单的bash脚本来启动它,但这并不理想。
无论如何(在linux、ubuntu服务器中)是否有一个jar文件可以自己调用javavm?我已经找了一个shebang,但是找不到(这当然是有意义的,因为它是编译代码)。
这就是我想做的: myprogram.jar arg1 -arg2 而不是这样: java -jar myprogram.jar arg1 -arg2 谢谢,
布莱恩

csbfibhn

csbfibhn1#

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

sudo apt-get install jarwrapper

我认为,通过使用相同的包名安装,在其他发行版上也可以做同样的事情。

zkure5ic

zkure5ic2#

.zip文件格式(它是.jar格式的基础)在文件前面有额外数据的情况下似乎是健壮的。因此如果你使用 cat 命令将shebang放在jar文件的zip数据之前,并使该文件可执行,然后您可以像调用任何普通shell脚本一样调用jar文件。
例如:(注意 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
eqoofvh9

eqoofvh93#

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

相关问题