首页 / 知识

关于安装程序:分发Java应用程序的最佳方法是什么?

2023-04-16 09:37:00

关于安装程序:分发Java应用程序的最佳方法是什么?

What's the best way to distribute Java applications?

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

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

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


有多种解决方案,取决于您的发行要求。

  • 只是用一个罐子。这假设用户安装了正确的Java版本,否则用户将获得"类文件格式版本"异常。这对于在公司内部进行内部分发是很好的。

  • 使用launch4j和类似NSIS的安装程序。尽管用户仍然可以执行诸如卸载Java运行时之类的愚蠢工作,但是这给了您更多的控制权。这可能是最流行的方法,也是我目前使用的方法。

  • 使用Webstart。这也假设用户安装了正确的Java版本,但是使用起来容易得多。我的经验是,这对于严格控制的Intranet环境是很好的,但是对于较大的部署,这会带来麻烦,因为它有许多奇怪的故障。使用Java 1.7中的新插件技术可能会更好。

  • 使用本机代码编译器(如Excelsior JET)并作为可执行文件分发,或将其包装在安装程序中。昂贵,并且通常将您绑定到Java的较早版本,并且动态类加载有些麻烦,但是对于需要最小化支持麻烦的大规模部署而言,它非常有效。


  • 高级安装程序使将Java应用程序打包为Windows可执行文件变得容易,并且设置方式非常灵活。我发现,要将Java应用程序分发到Windows客户端,这是最简单的方法。


    这取决于目标用户的熟练程度。在大多数情况下,您希望将它们与运行基于Java的应用程序隔离开来。为他们提供执行正确操作的本机安装程序(创建开始菜单项,启动器,向添加/删除程序注册等),并且已经捆绑了Java运行时(因此用户不需要了解或关心它)。我想建议我们的跨平台安装工具BitRock InstallBuilder。尽管它不是基于Java的,但通常用于打包Java应用程序。它可以轻松地与Ant集成,并且您可以从Unix / Linux / Mac以及其他方式构建Windows安装程序。由于生成的安装程序是本地安装程序,因此它们不需要自解压步骤或目标系统中已经存在JRE,这意味着较小的安装程序并为您省去了很多麻烦。我还想提到我们对开源项目有免费许可证


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


    尽管我自己没有使用过NSIS(可编写脚本的可安装程序系统),但是有些安装脚本会检查目标系统上是否安装了所需的JRE。

    可从"代码示例"和"真实世界安装程序"页面获得许多示例脚本,例如:

    • 具有自动JRE安装的Java启动器
    • 简单的Java运行时下载脚本

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


    如果它是真正的具有GUI的最终用户应用程序,则应忽略编写程序(Java)时所用的语言,并为每个所选平台使用本机安装程序。 Mac人士需要.dmg,在Windows上需要.msi或.exe安装程序。在Windows上,我更喜欢NullSoft的NSIS,因为它不像InstallShield或InstallAnywhere那样令人反感。在OSX上,您可以依靠已经存在的JVM。在Windows上,如果需要,您需要检查并安装。 Linux的人不会运行Java GUI应用程序,只有少数人会知道如何处理可执行文件.jar。


    可执行文件是最好的,但它们受平台限制,即对于Linux使用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


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

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

    这似乎是在复制一个jar的功能,但是不需要其他配置即可使其运行。


    What's the best way to distribute a
    Java application? What if the Java
    application needs to install artifacts
    to the user's computer? Are there any
    good Java installation/packaging
    systems out there?

    根据我的经验(通过评估多个选项),install4j是一个很好的解决方案。它为任何平台创建本机安装程序,专门用于安装Java应用程序。有关详细信息,请参见其网站上的"功能"。

    install4j是一种商业工具。特别是如果您的需求相对简单(只需分发应用程序并安装一些构件),则存在许多其他好的选择,包括免费的选择(例如izPack或已经提到的Lauch4j)。但是您要求最好的方法,据我目前的知识,install4j是一种方法,特别是在分发更大或更复杂的Java(EE)应用程序时。


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

    然后,我们将Inno Setup打包在一起以安装在用户的计算机上。


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

    1
    java -jar jarname.jar

    恕我直言,jar是简单性的主要要求。


    installanywhere很好但是很贵-我还没有找到(免费)好


    从我的角度来看,出色的分发机制是使用诸如ClickOnce或WebStart技术之类的东西。您只需将版本部署到服务器,当版本发布时,它将自动获取到客户端。
    Eclipse RCP平台还包含UpdateManager,它不仅可以执行WebStart的功能,还可以执行更多操作。

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


    最佳答案取决于平台。对于在Windows上进行部署,结合使用一罐和launch4j取得了不错的效果。确实花了一些时间来正确设置我的构建环境(主要是Ant脚本),但是现在已经很轻松了。


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

    作为用户,我更喜欢解压缩并运行某种安装方式(请不要选择开始菜单项)。但是,IT行业以外的人员可能会有不同的偏好。因此,如果该应用程序主要面向开发人员zip-run.bat路由,那么可以使用安装程序安装面向公众的应用程序。


    应用程序方法安装程序选择

    最新内容

    相关内容

    猜你喜欢