当前位置: 首页 > 知识库问答 >
问题:

为Jar文件编写Unix安装程序

白修谨
2023-03-14

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

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

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

基本上,我希望用户能够运行

共有1个答案

刘高峯
2023-03-14

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

由于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!

请参见“简单”

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

此外,如果您想为用户提供RPM或DEB包或其他东西,fpm会让这变得非常简单。

 类似资料:
  • 过滤程序是 UNIX® 中一种常见的应用程序, 它从标准输入 stdin 读入数据, 然后进行相关处理, 最后将结果写到标准输出 stdout。 在本节中, 我们将编写一个简单的过滤程序, 从而学习如何从标准输入 stdin 和标准输出 stdout 进行读写。 这个过滤程序将按字节把输入转换成16进制的数字, 并在每个数字的后面添加一个空格。 %include 'system.inc'

  • 问题 > 如果javajdk没有安装在linux操作系统上,jar将不会运行。 如果在linux中运行JavaFXJAR,就会出现如下错误 后来,我做了这个。成功了。 要使用终端运行java-fx应用程序,请遵循以下步骤: 安装openjfx(如果尚未安装): 列出javafx库位置: 输出如下: ./usr/usr/share/usr/share/doc/usr/share/doc/openjf

  • 我使用的是CakePHP3.6。2尝试使用Composer安装CakeDC用户插件时,会显示以下错误消息: 有谁能告诉我如何解决这个问题,同时仍然安装与作曲家? 我的composer.json:

  • 问题内容: 当前提供以下实用程序方法来为各种收集接口创建包装器: 类似地,它也有6个重载。 明显的遗漏是这里的实用方法。的确如此,但and 和and 确实有专用于and的实用程序方法。大概是一个有用的抽象,否则它本来就不会存在的,但是还没有实用的方法。 所以问题是: 为什么不提供实用方法的特定原因? 您将如何编写自己的包装器? 浏览OpenJDK版本的源代码似乎表明这只是一个“机械”过程 通常,您

  • 在我的Windows7 PC上安装Vertica_5.1.1_JDK_5时遇到问题。我安装了最新的Java SDK。当我键入java-jar vertica_5.1.1_jdk_5.jar时,得到的是“no main manifest attributes”。我打开了JAR中的MANIFEST文件,发现“manifest-version:1.0created-by:1.5.0_07(Sun Mic

  • 问题内容: 我正在寻找一个完全由Java驱动的免费跨平台安装程序生成器(这意味着工作流和插件是用Java编写的)。理想情况下,安装程序应按需下载JRE,而不是将其直接捆绑到安装程序中。这样的东西已经存在了吗? 请注意,InstallAnywhere不再提供免费版本。 问题答案: IzPack 抗原 Launch4J 蚂蚁 Java服务包装器 提起Java安装程序 JSmooth VA安装 pack