2014-06-08 23 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使得这很容易。