2014-06-08 54 views
1

我編寫了一個Java應用程序,並創建了一個可執行的Jar文件,該文件成功運行我的應用程序java -jar myJar.jar。我有一個名爲launchMyProgram的可執行shell腳本,它封裝了此Jar的啓動(並提供各種標誌,如--help等)。我的目標輸出目錄如下所示:爲Jar文件編寫Unix安裝程序

$ ls /path/to/MyProject/target/ 
archive-tmp/  classes/   myJar.jar 

什麼是爲我的Unix專用應用程序編寫安裝程序的標準方法?我假設我將launchMyProgram可執行文件放在/ usr/local/bin中是正確的。但是我在哪裏放置Jar文件?我應該爲我的程序文件製作自己的子目錄嗎?我是否需要將上述輸出中的classes目錄複製到與Jar相同的目錄中?這將通過Makefile運行,因此用戶可以覆蓋我的選擇。我希望用戶能夠運行make && make install,並且能夠運行我的應用程序launchMyProgram,並且我希望將我的文件(一個jar文件,一個'classes'文件夾和一個shell腳本)放在最典型的地方可能。

回答

0

其中一個最好的方法做了很多次,但不幸的是還沒有標準。

由於JAR是一個允許有任意前綴的ZIP文件,因此您可以在您的jar文件中添加啓動器shell腳本,將其標記爲可執行文件,並將其視爲獨立二進制文件。

$ echo '#!/bin/bash' > launchMyProgram 
$ echo 'exec java -cp "${0}" com.example.program.Main "${@}"' >> launchMyProgram 
$ cat myJar.jar >> launchMyProgram 
$ chmod +x ./launchMyProgram 
$ ./launchMyProgram 
Hello, world! 

有關更多詳細信息,請參見Simple & Easy Executable Jars

您應該可以將classes/文件夾中的所有內容打包到您的jar中,並且仍然能夠正常工作。


另外,如果您想爲用戶提供的RPM或DEB包什麼的,fpm使得這很容易。