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

什么';分发Java应用程序的最佳方式是什么?,java,installation,jar,software-distribution,Java,Installation,Jar,Software Distribution,Java是我选择的编程语言之一。我总是遇到将我的应用程序分发给最终用户的问题 给用户一个JAR并不总是像我希望的那样对用户友好,使用JavaWebStart需要维护一个web服务器 分发Java应用程序的最佳方式是什么?如果Java应用程序需要将工件安装到用户的计算机上怎么办?有好的Java安装/打包系统吗?对于简单的Java应用程序,我喜欢使用Jar。分发一个用户只需单击(Windows)或 总之,当简单性是一个主要要求时,jar是一种方法。可执行文件是最好的,但它们受平台限制,即使用gcj:

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

给用户一个JAR并不总是像我希望的那样对用户友好,使用JavaWebStart需要维护一个web服务器


分发Java应用程序的最佳方式是什么?如果Java应用程序需要将工件安装到用户的计算机上怎么办?有好的Java安装/打包系统吗?

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


总之,当简单性是一个主要要求时,jar是一种方法。

可执行文件是最好的,但它们受平台限制,即使用gcj:for linux生成可执行文件,使用launch4j:生成windows可执行文件。
要在linux上打包,您可以使用任何rpm或deb打包机。对于win32 try,最佳答案取决于平台。对于Windows上的部署,我使用和的组合获得了良好的结果。正确设置我的构建环境(主要是ant脚本)确实需要一点时间,但现在它相当轻松。

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

在我看来,更好的分发机制是使用类似于、或技术的东西。您只需将该版本部署到服务器上,当该版本发布时,它就会自动到达客户端。 EclipseRCP平台还包含UpdateManager,它完成了WebStart所做的工作,但还有更多


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

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

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

  • 用个罐子就行了。这假设用户安装了正确的java版本,否则用户将获得“类文件格式版本”异常。这适用于公司内部的内部分配

  • 使用launch4j和类似NSIS的安装程序。这给了您更多的控制,尽管用户仍然可以做一些愚蠢的事情,比如取消安装java运行时。这可能是最流行的方法,也是我目前使用的方法

  • 使用Webstart。这还假设用户安装了正确的java版本,但这更容易操作。我的经验是,这对于严格控制的intranet环境来说是很好的,但对于更大的部署来说却是一个难题,因为它有许多奇怪的故障。使用Java1.7中的新插件技术可能会更好

  • 使用本机代码编译器(如Excelsior JET)并作为可执行文件分发,或将其打包到安装程序中。价格昂贵,而且它通常会将您绑定到稍旧的java版本,动态类加载会带来一些麻烦,但对于需要将支持麻烦降至最低的大规模部署,它非常有效


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


    然后我们使用Inno安装包在用户的机器上进行安装。

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

    作为一名用户,我更喜欢解压并运行某种安装(请不要使用“开始”菜单项)。然而,IT行业以外的人可能有不同的偏好。因此,如果应用程序主要面向开发人员zip-run.bat route,并且面向普通公众的应用程序可以使用安装程序进行安装。

    尽管我自己没有使用过(Nullsoft Scriptable installer System)(Nullsoft Scriptable installer System),但是有安装脚本可以检查目标系统上是否安装了所需的JRE

    和页面中提供了许多示例脚本,例如:


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

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

    installanywhere很好,但很昂贵-我还没有找到(作为)好的免费软件

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

    我使用Maven2 Assemb找到了我需要的东西
    java -jar jarname.jar