[英]Running a JAR file without directly calling `java`
我正在部署一個用Java編寫的命令行工具,它接受命令行參數。 我把它打包成一個JAR文件,因為它有一個單個文件很方便。
問題是要運行它,你必須首先調用java -jar (filename) (args)
,這非常煩人。
我目前的方式是有一個簡單的bash腳本啟動它,但這不太理想。
無論如何(在Linux,Ubuntu Server中)是否要生成一個自己調用Java VM的JAR文件? 我找了一個shebang,但找不到一個(當然這是有道理的,因為它是編譯代碼)。
這就是我想要做的: myprogram.jar arg1 -arg2
而不是: java -jar myprogram.jar arg1 -arg2
謝謝,
布賴恩
.zip文件格式(.jar格式所基於的格式)似乎在文件前面有額外數據的情況下是健壯的。 因此,如果您使用cat
命令在jar文件中的zip數據之前放置shebang,並使文件可執行,那么您可以調用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
請參閱Linux Kernel文檔中的Documentation / java.txt,該文檔告訴您如何使用binfmt_misc
內核模塊配置系統以自動運行Jar文件。 但是,這是您在計算機上更改的配置選項,而不是您更改的jar文件,因此它不會跟蹤系統之間的jar文件。
在基於debian的發行版中,可以安裝jarwrapper
sudo apt-get install jarwrapper
我認為通過使用相同的包名稱安裝,可以在其他發行版上執行相同的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.