代码之家  ›  专栏  ›  技术社区  ›  HalfBrian

在不直接调用“Java”的情况下运行JAR文件

  •  22
  • HalfBrian  · 技术社区  · 15 年前

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

    问题是要运行它,必须先打电话 java -jar (filename) (args) 这很烦人。

    我目前的方法是用一个简单的bash脚本来启动它,但这并不理想。

    在Linux(Ubuntu Server)中,是否有一个JAR文件自己调用Java虚拟机?我找过一个shebang,但找不到它(这当然是有意义的,因为它是编译代码)。

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

    谢谢,
    布瑞恩

    3 回复  |  直到 11 年前
        1
  •  17
  •   Ken Bloom    15 年前

    Documentation/java.txt in the Linux Kernel documentation ,它告诉您如何使用 binfmt_misc 内核模块自动运行JAR文件。但是,这是您在计算机上更改的一个配置选项,而不是您在JAR文件中更改的内容,因此它不遵循JAR文件从一个系统到另一个系统。

        2
  •  39
  •   Ken Bloom    15 年前

    .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
    
        3
  •  2
  •   y.petremann    11 年前

    在基于Debian的发行版上,可以安装jarWrapper

    sudo apt-get install jarwrapper
    

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