2008-09-17 120 views
104

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

给用户一个JAR并不总是像用户友好的,因为我使用Java WebStart要求我维护一个Web服务器。

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

+0

的Java Webstart的可以用来关闭任何URL,例如像CD或网络驱动器中的文件系统。当然,它不会给你太多。注意:eclipse不使用安装程序,只需将其解包并运行即可。也许你不需要安装程序。 – 2009-05-10 18:38:36

+1

现在,将这样一个Java WebStart应用程序部署到Google应用程序引擎。 – 2013-01-10 14:42:42

+5

这个问题关闭了,真遗憾。我不同意“主要以意见为基础”的理由。所提供的答案不是基于意见,而是基于经验。我总是欢迎根据经验得到好的答案。那些不能从历史中学习的人注定要重复它。 – bouvierr 2015-12-22 20:18:43

回答

80

根据您的配送要求,有多种解决方案。

  1. 只需使用一个罐子。这假定用户已经安装了正确的java版本,否则用户将得到“class-file format version”异常。这适合在公司内部分配。

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

  3. 使用Webstart。这也假定用户已经安装了正确的java版本,但这样做要容易得多。我的经验是,这对于严格控制的内部网环境来说很好,但是由于它有许多奇怪的故障,因此在部署较大的情况下会变得很痛苦。 Java 1.7中的新插件技术可能会更好。

  4. 使用像Excelsior JET这样的本机代码编译器并将其作为可执行文件进行分发,或者将其包含在安装程序中。价格昂贵,它通常会将您与Java稍老一些的版本绑定在一起,并且动态类加载会带来一些麻烦,但对于需要将您的支持麻烦最小化的大规模部署非常有效。

1

对于我喜欢使用Jar的简单Java应用程序。这是非常简单的以分配一个文件,用户只需点击(Windows)中,或

java -jar jarname.jar 

恕我直言,罐子是走的时候简单是一个主要要求的方式。

0

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

3

如果它是一个真正的具有GUI功能的最终用户应用程序,则应该忽略您编写该程序的语言(Java)并在每个所选平台上使用本机安装程序。 Mac的人想要一个.dmg,并在Windows上.msi或.exe安装程序是要走的路。在Windows上,我更喜欢NullSoft的NSIS,因为它比InstallShield或InstallAnywhere更不受欢迎。在OSX上,您可以指望JVM已经在那里。在Windows上,如有必要,您需要检查并安装它们。 Linux人不会运行Java GUI应用程序,而少数人会知道如何处理可执行文件.jar。

+3

真的吗? linux的人不会运行gui应用程序?那么我猜他的程序对他们来说毫无用处,让整个讨论都没有意义。 – Matt 2012-08-31 12:38:52

+0

@Matt你为什么假设原来的应用程序是一个GUI应用程序?我已经在Linux上安装了许多命令行java应用程序,而那些以.deb或.rpms命名的应用程序尤其值得赞赏。 – 2012-08-31 19:15:29

+1

原标题说GUI。此外,如果webstart已经提出,这是一个很好的选择,它是一个gui应用程序。最后,说linux用户不使用GUI应用程序完全是不真实的。 – Matt 2012-09-01 04:10:58

0

从我的角度来看,卓越的分配机制是使用类似ClickOnceWebStart技术。您只需将版本部署到服务器,并在发布版本时自动将其发送到客户端。 另外,Eclipse RCP平台包含UpdateManager,可以完成WebStart的功能,但也有更多。

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

5

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

1

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

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

-2

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

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

4

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

0

InstallAnywhere的是好的,但昂贵的 - 我还没有发现(因为)良好的自由一个

2

我需要一种方法来包装我的项目和它的依赖到一个单一的jar文件。

我发现我需要什么样的使用的Maven2大会插件:Maven2 Assembly plugin

这似乎复制的one-jar功能,而且无需额外配置即可获得下去。

4

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

1

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

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

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

相关问题