【问题标题】:how to build a self-extracting JAR in Java如何在 Java 中构建自解压 JAR
【发布时间】:2015-09-29 14:58:50
【问题描述】:

我正在尝试为 Java 应用程序构建一个安装程序,并希望构建一个提取自身的 JAR。 JAR 将使用 Maven 程序集构建,并在清单中指定一个主类。我希望主类将 JAR 的其余部分提取到指定目录中。 JAR 将包含其他 JAR 和一些文档。我发现了其他问题,例如 (How to copy file inside jar to outside the jar?),但它们没有解决自提取 JAR 问题。我想知道如何 1) 获取执行 main 的 JAR 的位置和名称,2) 将 JAR 的内容复制到指定目录中。

更新:我也很欣赏解决如何为 Maven Java 应用程序(使用 Eclipse)构建安装程序的答案。

【问题讨论】:

  • 保持 JAR 原样并调用 ```java -jar MainClass" 执行程序有什么问题?
  • 我希望用户能够访问 JAR 中的文件,例如文档、配置文件等...我也想独立运行一些配置文件。
  • 您可以访问 JAR 中的文件,那么为什么需要提取它们?

标签: java maven jar self-extracting


【解决方案1】:

如果您有想要用户更新的配置,请不要将它们包含在您的 jar 文件中。你有几个选择。

如果默认配置文件不存在,则将其写出。

第二个是使用IzPack 提供一个安装程序jar,它将复制用户随后可以编辑的默认配置。

如果您想了解 IzPack 的工作原理,您可以下载 Squirrel,这是一个使用 IzPack 自行安装的 SQL 工具。

【讨论】:

  • 谢谢。不幸的是,我认为 IzPack 许可证不允许用于商业用途。
  • 是的,我认为你是对的。我一定一直在看网站许可证。
【解决方案2】:

实际上这个答案对我有用:How to write a Java program which can extract a JAR file and store its data in specified directory (location)? 除了我想跳过复制主类文件以及跳过在其路径上创建文件夹,所以如果主类驻留在以say开头的包中,“ com”,然后添加

if(file.getName().startsWith("com"))
    continue;

下面

java.io.File f = new java.io.File(destDir + java.io.File.separator + file.getName());

【讨论】:

  • 我还是不明白它的趣味性。配置文件解压后可以修改吗?
  • 是的,用户必须有权访问打包在 jar 中的配置文件、文档等。
  • 当您需要更新 jar 时会发生什么?文件被替换了吗?
  • 好点。如果配置文件已经存在,我无法覆盖它们。
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
相关资源
最近更新 更多