什么是安装Java EE应用程序的好的InstallAnywhere替代品?

您build议使用哪种(商业或免费)安装程序工具来replaceInstallAnywhere作为Java EE应用程序的安装程序? 你特别喜欢什么,它有什么缺点?

一些要求:

  • 必须支持运行自定义Java代码作为安装过程的一部分
  • 必须支持Windows,包括Windows Server 2008等最新的64位版本; 支持其他目标操作系统是一个加号
  • 必须能够在Windows上将捆绑的应用程序服务器(如Resin或Tomcat )作为服务安装
  • 必须支持复制和移动文件,编辑configuration文件,解压缩ZIP等基本的东西。
  • (必须支持捆绑特定版本的JRE;至less要包含一个ZIP文件才能解压缩)

编辑:更多几点:

  • 优选地,不依赖于目标机器上预装的JRE(或任何其他第三方运行时环境或库); 换句话说,可以产生独立的Windows .exe(或.msi)
  • 该工具最好是跨平台的,这样安装程序的开发可以在Linux,Windows或Mac上完成。
  • 应该最好有一个体面的graphics用户界面将安装程序放在一起。 但是,一旦完成,就必须跳过GUI并使安装程序构build自动构build过程的一部分。

编辑 :我发布了一个单独的答案,关于我们最终select什么和为什么。

在这种情况下,不幸的是,SO没有告诉我们很多,我们不知道(事实上我们最终select的工具在任何答案中都没有提到)。 不过,我在这里发表我们的经验,因为他们以后可能会对他人有所帮助。

我们(快速)评估了以下安装工具,主要是通过查看他们的网站和浏览网页上的其他信息: 实际安装程序 , 高级安装程序 , BitRock InstallBuilder , Inno安装程序 , 安装Creator , 安装VISE for Windows , InstallShield , install4j , IzPack , NSIS , openInstaller , Scriptlogic MSI Studio , Smart Install Maker , Symantec Wise Installation Studio和WiX 。

我们在早期就筛选出了大部分,最终确定了两个选项来进一步评估: BitRock InstallBuilderinstall4j 。 对于这些工具,我们下载了评估版,并做了一些原型devise,看看对我们来说最重要的东西是否真的得到支持,以及让事情起作用是多么的容易或者困难。

这两个选项在许多方面都很好(这两者似乎都是InstallAnywhere的不错select):

  • 他们生产完全本地和漂亮的Windows .exe安装程序,很容易与自己的graphics等自定义
  • 这两个工具都可以很容易地被自动化,所以安装程序的构build是由Ant触发的 (使用install4j,我花了五分钟的时间学习并实现它。)
  • 两家公司似乎都有很好的支持(至less对于评估他们的产品的前景来说);特别是来自BitRock的我们得到了非常快速的回复。

在下面的情况下,install4j比我们的需要好像比BitRock更好(当然,其中许多是主观的,所以YMMV):

  • install4j对运行自定义Java代码的支持肯定更好 – 可以在安装过程中的任何时候完成,无论系统上是否有预装的JRE。
  • BitRock使用更加硬编码的安装步骤,而install4j更加灵活。 在install4j中,添加自定义的屏幕和表单(有或没有自定义Java代码),询问用户input等等,可以在任何时候,在安装任何文件之前或之后完成。
  • 还有一些基本的东西,例如定义要复制到目标系统的文件集,以及添加安装步骤以replaceconfiguration文件中的某些string在install4j中似乎更容易一些。
  • install4j对JRE捆绑有更好的支持
  • 在Linux上创build安装程序时,install4j IDE的外观和感觉比BitRock更好(更“本机”)
  • (install4j的许可选项对我们来说比较好 – 我们强烈希望为所有开发人员提供几个浮动许可证,以便为所有开发人员指定许可证,或者支付昂贵的“站点许可证

所以最终我们去了install4j 。 以下是关于为什么令人印象深刻的更多细节:

  • 它的IDE将安装程序放在一起,非常简单易用 – 即使不查看文档,我也可以快速find所需的大部分内容。 而且当我必须检查文档中的某些内容时(例如,如何引用安装variables ;如何开始编写针对install4j API的自定义Java代码 ),不需要很长时间就可以find我需要的东西。
  • 您可以在安装过程中完全自定义屏幕和操作,还可以随时添加自定义屏幕和操作(针对其Java API编码)。 这对我们很重要,因为我们需要从旧的InstallAnywhere安装程序中重用现有的自定义Java代码。
  • 在一些小的细节上,install4j似乎是Java开发人员的理想select。 例如,如果您想要添加一个validation脚本来检查某些用户input,那么可以使用普通的旧Java ,在IntelliJ IDEA类似的编码辅助下,在install4j IDE本身中快速编写代码。
  • 我们认为install4j浮动许可证的成本是合理的,考虑到这个工具有多好(和InstallAnywhere的昂贵价格相比…)
  • 简而言之,它似乎是部署Java应用程序的最佳安装工具。

我可以担保izPack 。 它是基于Ant的,因此您可以在其中打包Ant安装,Ant安装可以包含在Ant build.xml中编写的自定义任务和/或脚本(例如,使用Groovy,Beanshell或任何支持BSF的脚本语言)。 所以它会涵盖您的可定制的要求。

我已经使用它在所有上述 – 解压缩/服务/自定义代码。 这是多平台,但我不能担保上述具体实例(64位Windows)。 但是,如果它运行Java,你应该没问题。

头痛的是JRE。 你显然需要一些 JRE来运行这个。 不过我认为你应该能够在izPack中打包并执行特定的JRE安装。

我们在使用InstallAnywhere和特别是其堂兄(现已解散的)InstallShield MP的一些令人沮丧的经历之后创build了BitRock InstallBuilder ,这是一个跨平台安装工具。 我们有一半以上的客户使用我们的工具来打包基于Java的软件,但是这个工具是本地的,而不是基于Java的。 这意味着我们有许多优点,比如本地的外观和感觉(包括Vista,GTK,Qt等),不需要在安装之前自行提取(启动速度更快,空间要求更less)来提及一对。 回答你的具体问题:

  • 在多个时间点支持调用Java代码作为安装的一部分(例如当显示某个页面,复制文件,卸载时等)。 代码不在安装程序中编译,但可以在外部调用,安装程序中使用的结果。 如果你更具体的关于你需要哪种types的代码,我可以提供特定的示例代码。 对于需要手动添加到其他安装程序的function,我们有很多内置操作,因此您可能不需要首先编写代码!
  • 我们支持所有版本的Windows,包括64位和Windows 2008(多个客户已经使用我们的安装程序在这些平台上进行了authentication)
  • 我们支持捆绑的应用程序服务器,包括Tomcat,Resin,JBoss等。 看看BitNami的例子,我们已经创build了这样的堆栈。
  • 我们支持复制和移动文件,replaceconfiguration文件中的值,解包文件和大多数其他常见的安装function。 我们的原则之一是安装程序应该提供对常用安装操作的内置支持,并且具有简单,干净的界面来调用特定于客户产品的外部代码。
  • 我们支持将JRE捆绑在一起,因为您提到的通常只是捆绑JRE目录,并在启动脚本中为JAVA_HOME设置适当的值

您可以看看我们的一些客户 ,如MySQL,三星,摩托罗拉,GitHub等InstallBuilder是一个商业产品,但我们提供免费的开源项目许可和小企业和microISV的折扣。

目前我们正在使用GetDown来处理我们的swing应用程序的分发。 我们使用Tomcat来分发更新,并使用GetDown来下载这些更新。 它非常灵活和强大,并且比java WebStart好得多,并且因为它产生了更改的校验和,所以节省了带宽,并且下载了刚刚更改的文件。

一个很好的教程: http : //www.hascode.com/2012/05/creating-updatable-java-applications-using-getdown-and-the-getdown-maven-plugin/

项目网站: http : //code.google.com/p/getdown/

只是想补充说我的公司已经使用了InstallAnywhere大约6年了,但是我们决定继续前进。 原因是双重的。

首先,他们的定价是绝对公路抢劫,与INSTall4J和BitRock这样的直接竞争对手相比,许可限制严格。

我与InstallAnywhere的其他问题是产品只是最低限度维护。 我通过许多不同的版本已经使用了6 – 7年的产品,错误很less被修复,你一定不能期待新的function。 基本上所有你可以期望的是,他们将增加对Windows / Mac的新版本的支持,因为它出来。 他们的支持费用相当昂贵,但我从未有过实际支持的要求。 当我第一次购买产品时,我相信它来自一家名为ZeroG的公司,他们专注于这个产品。 他们实际上维护和改进了产品。 当时那是唯一的真正的门票,他们在竞争中突飞猛进。

然后它被Macrovision和Flexera收购。 自从ZeroG出售该产品以来,它一直是该公司的一个辅助产品,并且对它的关注一直很差。 看起来似乎是为了完成一套产品而购买更多,而不是因为公司真的想要维护产品。

谨慎的话,仔细评估这些产品,因为你可以与他们联系在一起。 我们本来应该早一点离开产品,但是我们投入了很多精力,不仅仅是安装人员,而是根据产品的特性/局限性build立了自动更新scheme,因为投入劳动力而离开产品是非常昂贵的。在一个新产品中重现这一点。

只是我的,但我不会推荐InstallAnywhere。

在多平台环境中进行部署一直是麻烦的重要来源。 它认为最佳解决scheme的目标是为所有平台(如RPM,DEB或MSI)创build本地软件包…可以无人值守安装的软件包。

开发人员应该努力使应用程序自我修复并运行,而无需安装。

这样做将会减less部署工作的成本。

我知道这不是一个解决问题的方法,但是有时你可能会以这种方式获得更好的结果。

请记住,如果您遵循这些规定,您将在Linux上免费更新服务。

我仍然希望微软能够添加类似于MSI的东西(而且不需要你注册)。 同时对于Windows,您可以查看刚刚以开放源代码发布的Google Updater – http://code.google.com/p/omaha/

他们为Mac OS http://code.google.com/p/update-engine/发布了一个类似的产品,但是他们没有考虑从这两个产品中创build一个产品。;

你可能对launch4j感兴趣

Jonik,感谢您发表您的经验的详细反馈。 我想写一个后续的答案,因为你提出了一些好的观点。

满足了一定的基本要求后(不幸的是,InstallAnywhere不再),没有什么“坏”或“好”的工具,而是更适合某些项目的工具。 看来你仔细研究了所有的选项,安装4j会更好地为您的项目。 这可能是一个不错的select,因为你有一个你以前的安装程序,你想重用现有的Java代码库(虽然我想认为一些代码将不需要使用InstallBuilder 🙂

对于InstallBuilder,我们支持使用<insertBefore>标签自定义屏幕序列(我们可能应该更好地logging这个)。 捆绑一个JRE(在大多数情况下只包括java /文件夹)也很简单,但我认为你的批评是有效的:因为这是一个普遍的任务,我们应该做更好的工作来logging/通过GUI访问它,包括拖放在所有支持的平台上。 我们已经在我们的路线图中改进了您提到的领域的GUI。 有趣的是,我们的许多客户发现XML格式非常易于使用,他们更喜欢使用编程编辑器编辑它(就好像编辑HTML一样)

最后,在许可方面,如果这些额外的程序员只是构build安装程序(而不是devise它们)或购买用于构build或持续集成机器的额外许可证,则我们当前的模型不需要购买额外的许可证。 在任何情况下,一些用于install4j的浮动许可证比为BitRock提供的完整企业站点许可证费用更高:)

再次感谢你的反馈

我build议看看cmInstall ,它可以在http://sourceforge.net/projects/cminstall/find

它几乎满足您的所有需求,而且是开源的。 另外我是一个它的开发者:)。

  1. [是]必须支持将自定义Java代码作为安装过程的一部分运行
  2. [是]必须支持Windows,包括Windows Server 2008等最新的64位版本; 支持其他目标操作系统是一个加号
  3. [可以通过使用第三方库来轻松完成,例如:Tanuki Software]必须能够在Windows上安装捆绑的应用程序服务器(如Resin或Tomcat)作为服务
  4. [是]必须支持复制和移动文件,编辑configuration文件,解压缩ZIP等基本的东西。
  5. [是的 – 或者你可以编程方式下载和解压缩]必须支持捆绑特定版本的JRE; 至less通过包括一个ZIP来提取

    6. [不需要 – 它需要安装jdk 1.6,支持.exe或.msi将来计划]最好不要依赖目标机器上的预装JRE(或任何其他第三方运行时环境或库); 换句话说,可以产生独立的Windows .exe(或.msi)

  6. [是]该工具应该最好是跨平台的,这样安装程序的开发可以在Linux,Windows或Mac上完成。

    7. [不 – cminstall框架是“基于开发人员的” – 但易于使用。只需阅读http://sourceforge.net/project/showfiles.php?group_id=250019&package_id=305489的教程,看看它是多么容易build立一个安装程序!%5D应该最好有一个像样的GUI把安装程序放在一起。; 但是,一旦完成,就必须跳过GUI并使安装程序构build自动构build过程的一部分。

我见过几个人推荐IzPack ,但我真的不知道它是否符合你的要求。 至less是免费的:)

Sun提供了一个开源安装程序:

OpenInstaller

我相信你所要求的所有function都是支持的。
但是对我来说似乎有点难以configuration。

但猜猜看:它不仅有一个GUI,而且还有一个(伪graphics)CLI。
好的截图和信息在这里

您可以尝试使用SetupBuilder Gradle插件来创build一个简单的Gradle构build脚本的本地* .msi安装程序。

  • 这是免费的。
  • 支持32位和64位Windows。 还有Linux和OSX。
  • 在Windows和OSX下捆绑Java VM,不需要预先安装的Java VM。
  • 可以在安装之前或之后运行Java代码。
  • 可以创build一个Windows服务/守护进程。
  • 没有GUI,但使用Gradle。 如果您已经使用Gradle作为构build脚本语言,那么这很容易。

我也想到了几个开源的多平台安装程序。 这是我的评论:

  1. BitRock InstallBuilder :仅适用于免费和开源开发者,因为它提供免费的开源项目许可证。
  2. InstallJammer :良好的免费和开源多平台安装程序。 只有一个担心,一旦从InstallJammer下载可执行文件,反病毒程序将立即删除它。 不知何故,从InstallJammer构build的文件被误认为是False Positives。 在发布之前,您将不得不使用更多的安全证书。
  3. Izpack :良好的免费和开源的多平台安装程序。 不习惯ant的人可能有点麻烦。 用于像PackJacket这样的GUI前端时可能会很棒。