分发Java应用程序的最佳方式是什么?

时间:2008-09-17 04:50:50

标签: java installer jar software-distribution

Java是我选择的编程语言之一。尽管我将应用程序分发给最终用户,但我总是遇到这个问题。

为用户提供JAR并不总是像我希望的那样友好,并且使用Java WebStart要求我维护一个Web服务器。

分发Java应用程序的最佳方法是什么?如果Java应用程序需要将工件安装到用户的计算机,该怎么办?那里有没有好的Java安装/包装系统?

16 个答案:

答案 0 :(得分:85)

根据您的分销要求,有多种解决方案。

  1. 只需使用一个罐子。这假定用户安装了正确的java版本,否则用户将获得“类文件格式版本”异常。这适用于公司内部的内部分发。

  2. 使用launch4j和NSIS等安装程序。这为您提供了更多的控制,尽管用户仍然可以做一些愚蠢的事情,比如卸载java运行时。这可能是最流行的方法,也是我目前使用的方法。

  3. 使用Webstart。这也假设用户安装了正确的java版本,但它更容易上手。我的经验是,这对于严格控制的Intranet环境来说很好,但是由于它有许多奇怪的故障,因此会因为更大的部署而变得痛苦。使用Java 1.7中的新插件技术可能会更好。

  4. 使用Excelsior JET之类的本机代码编译器并将其作为可执行文件分发,或将其包装在安装程序中。价格昂贵,它通常会将您与旧版本的java相关联,并且动态类加载会有一些痛苦,但它对于需要最大限度地减少支持麻烦的大规模部署非常有效。

答案 1 :(得分:9)

答案 2 :(得分:5)

advanced installer可以轻松地将java应用程序打包为Windows可执行文件,并且它的设置方式非常灵活。我发现,为了将Java应用程序分发到Windows客户端,这是最简单的方法。

答案 3 :(得分:4)

JSmooth是一个简单的程序,它将您的jar包装在一个标准的Windows可执行文件中。它带有一个简单的GUI,允许您配置所需的JVM,将其与应用程序捆绑在一起,或者如果尚未安装,则提供下载它的选项。您可以按原样发送exe文件或使用可能的依赖项压缩它(或者让程序在启动时从网上下载额外的依赖项)。它也是免费的,如啤酒和演讲,可能(或可能不)是一件好事。

答案 4 :(得分:4)

这取决于目标用户的复杂程度。在大多数情况下,您希望将它们与运行基于Java的应用程序的事实隔离开来。给他们一个正确的本机安装程序(创建开始菜单项,启动器,注册添加/删除程序等),并已捆绑Java运行时(因此用户不需要知道或关心它)。我想建议我们的跨平台安装工具BitRock InstallBuilder。虽然它不是基于Java的,但它通常用于打包Java应用程序。它可以很容易地与Ant集成,您可以从Unix / Linux / Mac构建Windows安装程序,反之亦然。由于生成的安装程序是本机的,因此它们不需要自提取步骤或目标系统中已存在JRE,这意味着较小的安装程序并为您节省一些麻烦。我还想提一下我们有开源项目的免费许可证

答案 5 :(得分:3)

可执行文件是最好的,但它们是平台限制的,即使用gcj:http://gcc.gnu.org/java/来生成可执行文件并使用launch4j:http://launch4j.sourceforge.net/来生成Windows可执行文件。 要在linux上打包,您可以使用任何rpm或deb打包器。对于win32,请尝试http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System

答案 6 :(得分:3)

如果它是具有真实GUI的最终用户应用程序,则应忽略编写程序(Java)的语言,并为每个所选平台使用本机安装程序。 Mac人们想要一个.dmg,并且在Windows上.msi或.exe安装程序是可行的方法。在Windows上我更喜欢NullSoft的NSIS,因为它比InstallShield或InstallAnywhere更不令人反感。在OSX上,您可以依赖已存在的JVM。在Windows上,如有必要,您需要检查并安装它们。 Linux人员不会运行Java GUI应用程序,而且很少会知道如何处理可执行文件.jar。

答案 7 :(得分:3)

虽然我自己没有使用NSIS(Nullsoft Scriptable Installer System),但是有一些安装脚本可以检查目标系统上是否安装了所需的JRE。

Code ExamplesReal World Installers页面提供了许多示例脚本,例如:

(请注意,我实际上并未使用任何脚本,因此请不要将其作为认可。)

答案 8 :(得分:2)

我需要一种方法将我的项目及其依赖项打包到一个jar文件中。

我使用Maven2 Assembly插件找到了我需要的东西:Maven2 Assembly plugin

这似乎与one-jar的功能重复,但不需要额外配置即可实现。

答案 9 :(得分:1)

对于简单的Java应用程序,我喜欢使用Jar。分发一个用户可以单击的文件(Windows)或

非常简单
java -jar jarname.jar

恕我直言,当简单是主要要求时,jar是要走的路。

答案 10 :(得分:1)

我开发了eclipse RCP应用程序。通常,为了启动eclipse应用程序,包括可执行启动程序。我将java虚拟机包含在/ jre子目录中的application文件夹中,以确保使用正确的java版本。

然后我们用Inno Setup打包安装在用户的机器上。

答案 11 :(得分:1)

  

分发广告的最佳方式是什么?   Java应用程序?如果是Java怎么办?   应用程序需要安装工件   到用户的电脑?有没有   良好的Java安装/包装   那里的系统?

根据我的经验(来自evaluating a number of options),install4j是一个很好的解决方案。它为任何平台创建本机安装程序,专门用于安装Java应用程序。有关详细信息,请参阅其网站上的“Features”。

不过,

install4j是一个商业工具。特别是如果您的需求相对简单(仅分发应用程序并安装一些工件),则存在许多其他好的选项,包括免费选项(如izPack或已提及的Lauch4j)。但是你要求最好的方式,而且就目前的知识而言,install4j就是其中之一,特别是对于分发更大或更复杂的Java(EE)应用程序。

答案 12 :(得分:0)

最佳答案取决于平台。对于在Windows上的部署,我使用one-jarlaunch4j的组合获得了良好的结果。确实需要一段时间才能正确设置我的构建环境(主要是ant脚本),但现在它已经相当轻松了。

答案 13 :(得分:0)

从我的观点来看,优越的分发机制是使用类似ClickOnceWebStart技术的东西。您只需将版本部署到服务器,它就会在版本发布时自动发送给客户端。 此外,Eclipse RCP平台包含可以执行WebStart操作的UpdateManager,还有更多。

由于我使用Maven2进行构建,部署只是一块蛋糕:将构建的jar复制到服务器上的位置,如果需要更新jnlp文件并完成。

答案 14 :(得分:0)

installanywhere虽然很好但很昂贵 - 我还没有找到(好)免费的

答案 15 :(得分:-2)

我会将jar文件与其他相关的jar,配置文件和文档以及run.bat / run.sh一起压缩。最终用户应该能够将其解压缩到任何位置并根据需要编辑run.bat(在大多数情况下它应该在没有编辑的情况下运行)。 如果要在开始菜单,桌面,系统托盘等中创建条目,则安装程序可能很有用。

作为用户,我更喜欢解压缩并运行某种安装(请不要使用开始菜单项)。然而,IT行业以外的人可能会有不同的偏好。因此,如果应用程序主要针对开发人员,则可以使用安装程序安装zip-run.bat路由和普通公共应用程序。