我编写了一个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脚本)。
答案 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
使这一切变得非常简单。