分发Java应用程序的最佳方法是什么?
Java是我选择的编程语言之一。尽管将应用程序分发给最终用户,但我总是遇到问题。
为用户提供JAR并不总是像我想要的那样友好,并且使用Java WebStart要求我维护Web服务器。
分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统?
解决方案
回答
对于简单的Java应用程序,我喜欢使用Jar's。分发一个用户可以单击的文件非常简单(Windows),或者
java -jar jarname.jar
恕我直言,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
回答
最佳答案取决于平台。对于在Windows上进行部署,结合使用one-jar和launch4j取得了不错的效果。确实花了一些时间来正确设置我的构建环境(主要是Ant脚本),但是现在已经很轻松了。
回答
如果它是真正的具有GUI的最终用户应用程序,则应忽略编写程序(Java)时所用的语言,并为每个所选平台使用本机安装程序。 Mac人士需要.dmg,而在Windows上则需要.msi或者.exe安装程序。在Windows上,我更喜欢NullSoft的NSIS,因为它不像InstallShield或者InstallAnywhere那样令人反感。在OSX上,我们可以依靠已经存在的JVM。在Windows上,如果需要,我们需要检查并安装。 Linux人不会运行Java GUI应用程序,只有少数人会知道如何处理可执行文件.jar。
回答
从我的角度来看,出色的分发机制是使用诸如ClickOnce或者WebStart技术之类的东西。我们只需将版本部署到服务器,当版本发布时,它将自动获取到客户端。
Eclipse RCP平台还包含执行WebStart功能的UpdateManager,但还有更多功能。
由于我使用Maven2进行构建,因此部署只是小菜一碟:将已构建的jar复制到服务器上的位置,如果需要,请更新jnlp文件,然后完成。
回答
高级安装程序使将Java应用程序打包为Windows可执行文件变得容易,并且设置方式非常灵活。我发现,要将Java应用程序分发到Windows客户端,这是最简单的方法。
回答
有多种解决方案,具体取决于发行要求。
- 只是用一个罐子。这假定用户安装了正确的Java版本,否则用户将获得"类文件格式版本"异常。这对于在公司内部进行内部分配很好。
- 使用launch4j和类似NSIS的安装程序。尽管用户仍然可以执行诸如卸载Java运行时之类的愚蠢工作,但它给我们带来了更多的控制权。这可能是最流行的方法,也是我目前使用的方法。
- 使用Webstart。这也假定用户安装了正确的Java版本,但是使用起来却容易得多。我的经验是,这对于严格控制的Intranet环境是很好的,但是对于较大的部署,这会带来麻烦,因为它存在许多奇怪的故障。使用Java 1.7中的新插件技术可能会更好。
- 使用本机代码编译器(如Excelsior JET)并作为可执行文件分发,或者将其包装在安装程序中。昂贵,并且通常将我们绑定到Java的稍旧版本,并且动态类加载有些麻烦,但是对于需要最小化支持麻烦的大规模部署,它非常有效。
回答
我开发Eclipse RCP应用程序。通常,要启动Eclipse应用程序,应包含一个可执行启动器。我将Java虚拟机包含在/ jre子目录中的application文件夹内,以确保将使用正确的Java版本。
然后,我们将Inno Setup打包在一起以安装在用户的计算机上。
回答
我会把jar文件以及其他相关的jar,配置文件和文档以及run.bat / run.sh一起压缩。最终用户应该能够将其解压缩到任何位置,并根据需要编辑run.bat(在大多数情况下,它无需编辑即可运行)。
如果要在开始菜单,桌面,系统托盘等中创建条目,安装程序可能会有用。
作为用户,我更喜欢解压缩并运行某种安装方式(请不要输入开始菜单项)。但是,IT行业以外的人员可能会有不同的偏好。因此,如果该应用程序主要面向开发人员zip-run.bat路由,并且可以使用安装程序安装面向公众的应用程序。
回答
尽管我自己没有使用过NSIS(Nullsoft脚本安装程序系统),但是仍有一些安装脚本可以检查目标系统上是否安装了所需的JRE。
可从"代码示例"和"真实世界安装程序"页面获得许多示例脚本,例如:
- 具有自动JRE安装的Java启动器
- 简单的Java运行时下载脚本
(请注意,我实际上并未使用任何脚本,因此请不要将其视为认可。)
回答
JSmooth是一个简单的程序,可以将jar打包到标准的Windows可执行文件中。它带有一个简单的GUI,可让我们配置所需的JVM,将其与应用程序捆绑在一起,或者提供一个选项(如果尚未安装的话)进行下载。我们可以按原样发送exe文件,也可以使用可能的依赖关系将其压缩为zip(或者让程序在启动时从网上下载额外的依赖关系)。它也是免费的,例如啤酒和演讲,这可能是(或者可能不是)一件好事。
回答
installanywhere是好的,但价格昂贵,但我还没有找到(因为)好免费的一种
回答
我需要一种将项目及其依赖项打包到单个jar文件中的方法。
我使用Maven2 Assembly插件找到了所需的东西:Maven2 Assembly插件
这似乎是在复制一罐子的功能,但不需要其他配置即可完成。
回答
这取决于目标用户的熟练程度。在大多数情况下,我们希望将它们与正在运行基于Java的应用程序隔离开来。为他们提供执行正确操作的本机安装程序(创建开始菜单项,启动器,向添加/删除程序注册等),并且已经捆绑了Java运行时(因此用户不需要了解或者关心它)。我想建议我们的跨平台安装工具BitRock InstallBuilder。尽管它不是基于Java的,但通常用于打包Java应用程序。它可以轻松地与Ant集成,并且我们可以从Unix / Linux / Mac以及其他方式构建Windows安装程序。由于生成的安装程序是本地安装程序,因此它们不需要自解压缩步骤或者目标系统中已经存在JRE,这意味着较小的安装程序并为我们省去了很多麻烦。我还想提到我们对开源项目有免费许可证
回答
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)应用程序时。
回答
将Java转换为EXE的原因,时间,时间,方式和方式