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

时间:2015-05-28 15:43:54

标签: install4j

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

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

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

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

  • 我在可配置的表单屏幕中创建了一个文件选择器,它将在名为zipPath的变量中返回zip文件的路径。
  • 然后,我创建一个"提取zip文件"我将zip文件的名称设置为java代码的操作:
Zip file : context.getVariable("zipPath");

并指定临时目录的路径。

Destination directory : tempDir/temp
  • 将分发树中指定的文件复制到临时文件中。
Destination directory : tempDir/temp
Source files or directories : tempDir/needed files

其中所需文件是安装程序将用于复制分发树文件的文件夹。

  • 在新的临时文件夹中创建一个新的zip文件。
ZIP file : tempDir/temp/Zipfile.zip
Source files or directories : tempDir/needed files

我还不知道如何替换我希望利用文件选择器返回的变量的zip文件来执行此操作,但无论如何我查找了新创建的文件,我似乎并不是在我的电脑上的任何地方找到它们。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

${installer:zipPath}

通常,要查看发生的情况,请查看安装目录中的.install4j/installation.log文件。如果项目中没有“安装文件”操作,则日志文件将位于临时目录中,但会在安装程序结束时删除。

您可以添加参数

-Dinstall4j.alternativeLogfile=[path to log file]

将日志文件写入任何可写路径,并确保不删除它。

在您的方案中,从模板中删除“安装文件”操作是有意义的,而根本不使用分发树。而是将新文件压缩到名为patch.zip的文件中,并将其添加到“Installer->自定义代码和资源”选项卡中。然后您需要执行以下操作:

  • “提取文件${installer:sys.resourceDir}/patch.zip的ZIP文件”操作到某个临时目录

  • 将文件${installer:zipPath}的“提取ZIP文件”操作提取到同一个临时目录

  • 使用与源相同的临时目录为文件${installer:zipPath}创建“ZIP文件”操作

更新2018-01-12

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