Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为Jar文件编写Unix安装程序_Java_Unix_Jar_Makefile_Executable Jar - Fatal编程技术网

Java 为Jar文件编写Unix安装程序

Java 为Jar文件编写Unix安装程序,java,unix,jar,makefile,executable-jar,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应用程序编写安装程序的

我已经编写了一个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&&makeinstall
,能够使用
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!
有关更多详细信息,请参阅

您应该能够将
classes/
文件夹中的所有内容打包到您的jar中,并且仍然可以正常工作


此外,如果您想为用户提供RPM或DEB软件包或其他东西,这将非常容易