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

Lap*_*son 113 java installer software-distribution jar

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

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

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

Noe*_*din 86

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

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

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

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

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

  • 我不喜欢Webstart.它有太多的Java/Sun品牌.它很难让它正常工作.设置代码签名比它的价值更麻烦,用户无论如何都不了解安全优势和消息.如果你想在用户系统上做任何事情,你将不得不为你的代码签名证书付费以摆脱可怕的警告它会做很多复杂的缓存,这可能会导致问题.也许OSGi或即将推出的Java模块将提供类似的自动更新优势.我使用#2的变体并为Ant创建DMG/Packager for mac. (10认同)
  • 只是关于Webstart的说明:只要用户安装的Java版本不是石器时代(例如1.2),就可以告诉webstart下载并安装您的程序所需的Java版本的新Java版本不存在然而.查看.jnlp文件语法.当然,它仍然非常突出地显示您使用的Java可能不合适,具体取决于您处理的客户端.在这些情况下,您确实应该使用某种"本机"安装程序/文件格式,并尽可能隐藏实现细节. (4认同)
  • @JackN NSIS 是一个安装程序生成器。Launch4j 专门用于使启动/启动 Java 程序更容易。它们的功能有些重叠,但它们针对的是问题的不同部分。 (2认同)

rus*_*elf 5

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

  • 作为一个说明,它的成本...... (2认同)

sti*_*ian 5

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