如何用install4j修改war文件的源代码?

How to modify the source code of a war file with install4j?

我和我的队友在交付给客户的应用程序中存在更新或错误修复方面的问题,每次我们需要修复错误时,我们都必须前往客户的公司才能做出新的修改。 我们建议创建一个可自动应用补丁的可执行更新。该解决方案设置为使用 install4j 创建。

更详细地说,用户必须指定 war 文件的位置,安装程序将提取其内容,add/replace 需要的文件,然后重新存档。

我首先想知道是否有替代该解决方案的方法。 其次,我尝试 运行 一个模拟,我会向安装程序指定一个 zip 文件的位置,然后将其解压缩到一个临时文件夹中,并用在 install4j 的“文件”步骤中添加的内容覆盖它,最后重新压缩文件,但什么也没发生。

这是我在安装程序配置过程中所做的:

Zip file : context.getVariable("zipPath");

并指定了临时目录的路径。

Destination directory : tempDir/temp
Destination directory : tempDir/temp
Source files or directories : tempDir/needed files

where needed files 是安装程序将复制分发树文件的文件夹。

ZIP file : tempDir/temp/Zipfile.zip
Source files or directories : tempDir/needed files

我还不知道如何替换我想利用变量 return 由文件选择器编辑的 zip 文件,但无论如何我都在寻找新创建的文件,但我没有在我的电脑上似乎找不到它们。

我的配置有问题吗?还是我跳过了一个步骤?是否有很好的文档,或者直接的 ward 示例来说明我正在尝试做的事情,因为我发现官方示例和文档令人困惑?

谢谢。

您的错误是您将 zip 文件名设置为 Java 代码,该代码仅适用于脚本,不适用于文本字段。文本字段中的变量替换语法如下所示:

${installer:zipPath}

一般来说,要检查发生了什么,请查看安装目录中的 .install4j/installation.log 文件。如果您的项目中没有 "Install files" 操作,日志文件将位于临时目录中,但会在安装程序结束时删除。

您可以添加参数

-Dinstall4j.alternativeLogfile=[path to log file]

将日志文件写入任何可写路径并确保它没有被删除。

在您的场景中,从模板中删除 "Install files" 操作并且根本不使用分发树是有意义的。相反,将您的新文件压缩到名为 patch.zip 的文件中,然后将它们添加到 "Installer->Custom code & Resources" 选项卡上。那么您需要执行以下操作:

  • "Extract a ZIP file" 文件 ${installer:sys.resourceDir}/patch.zip 到某个临时目录的操作

  • "Extract a ZIP file" 对文件 ${installer:zipPath} 到同一临时目录的操作

  • "Create a ZIP file" 对文件 ${installer:zipPath} 的操作使用与源相同的临时目录


更新2018-01-12

从 install4j 6.1 开始,有一个 "Modify ZIP file" 操作可以直接修改 ZIP 文件,因此不再需要上述一系列操作。