为Jar文件编写Unix安装程序



我已经编写了一个Java应用程序,并且创建了一个可执行的Jar文件,它成功地运行了使用java -jar myJar.jar的应用程序。我有一个名为launchMyProgram的可执行shell脚本,它包装了这个Jar的启动(并提供了各种标志,如——help等)。我的目标输出目录如下所示:

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

为我的纯unix应用程序编写安装程序的标准方法是什么?我假设我在/usr/local/bin中删除launchMyProgram可执行文件是正确的。但是我应该把Jar文件放在哪里呢?我应该在某个地方为我的程序文件创建自己的子目录吗?我是否需要将上述输出中的classes目录复制到与Jar相同的目录中?这将通过Makefile运行,所以用户当然可以重写我的选择。

基本上,我希望一个用户能够运行make && make install,并能够运行我的应用程序与launchMyProgram,我想把我的文件(一个jar,一个'classes'文件夹,和一个shell脚本)在最典型的地方可能。

最好的方法之一已经被重新发明了很多次,但不幸的是,它还不是标准的。

由于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使这非常容易。

最新更新