为Jar文件编写Unix安装程序

时间:2014-06-08 20:06:26

标签: java unix jar makefile executable-jar

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

$ 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脚本)。

1 个答案:

答案 0 :(得分:0)

最好的方法之一已被多次重新发明,但遗憾的是还不是标准。

由于JAR是一个允许具有任意前缀的ZIP文件,因此您可以将启动器shell脚本添加到jar中,将其标记为可执行文件,并将其视为独立的二进制文件。

$ 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使这一切变得非常简单。