Java是我选择的编程语言之一。尽管将应用程序分发给最终用户,但我总是遇到问题。
为用户提供JAR并不总是像我想要的那样友好,并且使用Java WebStart要求我维护Web服务器。
分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统?
Java是我选择的编程语言之一。尽管将应用程序分发给最终用户,但我总是遇到问题。
为用户提供JAR并不总是像我想要的那样友好,并且使用Java WebStart要求我维护Web服务器。
分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统?
Answers:
有多种解决方案,取决于您的发行要求。
只是用一个罐子。这假定用户已安装正确的Java版本,否则用户将获得“类文件格式版本”异常。这对于在公司内部进行内部分发是很好的。
使用launch4j和类似NSIS的安装程序。尽管用户仍然可以执行诸如卸载Java运行时之类的愚蠢工作,但是这给了您更多的控制权。这可能是最流行的方法,也是我目前使用的方法。
使用Webstart。这还假定用户已安装了正确的Java版本,但是使用起来却容易得多。我的经验是,对于严格控制的Intranet环境而言,这很好,但是对于较大的部署,这会带来麻烦,因为它存在许多奇怪的故障。使用Java 1.7中的新插件技术可能会更好。
使用本机代码编译器(如Excelsior JET)并作为可执行文件分发,或将其包装在安装程序中。昂贵,并且通常将您绑定到Java的稍旧版本,并且动态类加载有些麻烦,但是对于需要最小化支持麻烦的大规模部署而言,它非常有效。
这取决于目标用户的熟练程度。在大多数情况下,您希望将它们与运行基于Java的应用程序隔离开来。为他们提供执行正确操作的本机安装程序(创建开始菜单项,启动器,向添加/删除程序注册等),并且已经捆绑了Java运行时(因此用户不需要了解或关心它)。我想建议我们的跨平台安装工具, BitRock InstallBuilder。尽管它不是基于Java的,但通常用于打包Java应用程序。它可以轻松地与Ant集成,并且您可以从Unix / Linux / Mac以及其他方式构建Windows安装程序。由于生成的安装程序是本地安装程序,因此它们不需要自解压步骤或目标系统中已经存在JRE,这意味着较小的安装程序并为您省去了很多麻烦。我还想提到我们对开源项目有免费许可证
可执行文件是最好的,但是它们受平台的限制,即使用gcj:http ://gcc.gnu.org/java/ for linux生成可执行文件,并使用launch4j:http ://launch4j.sourceforge.net/ 生成Windows可执行文件。要在Linux上打包,您可以使用任何rpm或deb打包程序。对于Win32,请尝试http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System
如果它是真正的具有GUI的最终用户应用程序,则应忽略编写程序(Java)时所用的语言,并为每个所选平台使用本机安装程序。Mac人士需要.dmg,而在Windows上则需要.msi或.exe安装程序。在Windows上,我更喜欢NullSoft的NSIS,因为它不像InstallShield或InstallAnywhere那样令人反感。在OSX上,您可以依靠已经存在的JVM。在Windows上,如果需要,您需要检查并安装。Linux的人不会运行Java GUI应用程序,只有少数人会知道如何处理可执行文件.jar。
我需要一种将项目及其依赖项打包到单个jar文件中的方法。
我使用Maven2 Assembly插件找到了所需的东西:Maven2 Assembly插件
这似乎可以复制one-jar的功能,但不需要任何其他配置即可使它运行。
我开发Eclipse RCP应用程序。通常,要启动Eclipse应用程序,应包含一个可执行启动器。我将Java虚拟机包含在/ jre子目录中的application文件夹内,以确保将使用正确的Java版本。
然后,我们将Inno Setup打包在一起以安装在用户的计算机上。
分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统?
根据我的经验(通过评估多个选项),install4j是一个很好的解决方案。它为任何平台创建本机安装程序,专门用于安装Java应用程序。有关详细信息,请参见“见其网站上的功能 ”。
install4j是一种商业工具。特别是如果您的需求相对简单(只需分发应用程序并安装一些构件),则存在许多其他好的选择,包括免费的选择(例如izPack或已经提到的Lauch4j)。但是您要求最好的方法,据我目前的了解,install4j是一种方法,特别是在分发更大或更复杂的Java(EE)应用程序时。
installanywhere很好但是很贵-我还没有找到(因为)好免费的
我将把jar文件以及其他相关的jar,配置文件和文档以及run.bat / run.sh一起压缩。最终用户应该能够将其解压缩到任何位置,并在需要时编辑run.bat(在大多数情况下,它无需编辑即可运行)。如果要在开始菜单,桌面,系统托盘等中创建条目,则安装程序可能会有用。
作为用户,我更喜欢解压缩并运行某种安装方式(请不要选择开始菜单项)。但是,IT行业以外的人员可能会有不同的偏好。因此,如果该应用程序主要面向开发人员zip-run.bat路由,那么可以使用安装程序安装面向公众的应用程序。