我一直想知道将 Java 项目转换为EXE
很长一段时间。
优势在于 Windows 上的更快部署,用户只需双击EXE
并启动应用程序,其中 Java ,他有运行某些命令。
但是EXE
实际上不是 Java 的目的是为了便携性。
那么您认为Java对EXE的好坏有什么想法?
我发现了一些有趣的文章here。
答案 0 :(得分:4)
由于我的专业知识是Java Web Start,它用于启动桌面应用程序。使用GUI,请考虑我的建议主要针对这些类型的应用程序。
其他人评论了EXE的操作系统特性。我总是想知道为什么人们会选择Java来开发Windows特定的桌面应用程序。因为用于Windows的Visual Studio软件可能会同时进行GUI开发(没有x-plat Java布局可以帮助你)和部署(只是猜测它可以产生EXE)更容易。
OTOH只有你可以说这个用例的最佳开发工具/语言是什么。
关于创建EXE的潜在缺点,我在JavaFAQ on EXEs注意到。
有许多充分的理由不将您的应用程序打包到可执行文件中。 DanielSjöblom指出:
Jon A. Cruz详细介绍了创建exe所需的开发过程中的一些额外步骤。他指出开发人员需要本机exe:
Jon进一步指出:当您发布标准Java字节码时,VM问题是平台或VM供应商的责任。但是,当您发送已编译的二进制文件时,它们将成为您的责任(即使它们实际上是供应商编译产品中的错误)。
...
当然,我是部署Java富客户端应用程序的首选。正在使用Java Web Start。以点的形式提供web-start的一些好处/功能:
JWS提供了许多吸引人的功能,包括但不限于:
我决定突出自应用程序逐渐转变后的自动更新。在磁盘上传递给应用程序。通过网络提供,自动更新变得越来越普遍。 JWS仍然提供了最好的更新体验(非常可配置,对用户来说几乎是透明的)我见过。
当然,JWS适用于可用于Java的桌面PC的操作系统。
.. Java Web应用程序是否需要互联网连接?
(注意名称是'Java Web Start'。)
确实如此。至少对于初始安装。可以指定更新检查以继续启动以前安装的应用程序版本。如果用户当前未连接。
但是,(据我估计)有更多的机器(如上网本)没有CD / DVD驱动器,没有互联网连接。 如果您想要销售到更大的市场,请访问网络以提供该应用。
答案 1 :(得分:3)
这取决于您的需求。我们在这里为客户编写了一个小条码客户端扫描程序应用程序。他们在两台Windows PC上运行它。他们很高兴拥有他们众所周知的exe文件。我们用Java编写它并为它们创建了一个EXE文件。
双方都很满意 - 所以为什么不这样做呢?
如果有充分的理由,除了教条主义以外什么都不反对,那么我认为这是正常的。
答案 2 :(得分:3)
我是您链接的文章的作者 - 很高兴您发现它很有趣!
正如我的文章所述,正如其他人已在其答案中指出的那样,有多种方法可以简化Java应用程序的部署 - JNLP,EXE包装器,捆绑私有JRE的安装程序等等。但真正的本机编译是唯一提供protection against Java decompilers的选项 - 您只是不提供字节码。
当然,这不会使您的代码无法进行逆向工程和篡改,只需要在所需技能和时间方面成本更高。
就应用程序性能而言,如果您定位嵌入式系统,本机编译可能会产生大差异。这也适用于内存和磁盘占用空间,尽管程度较小。在桌面上,您通常会获得更好的启动,但在大多数其他方案和方面,结果将取决于您的应用程序。
答案 3 :(得分:2)
如果有充分的理由,为什么不呢?甚至Eclipse在Windows上也有一个EXE(和linux,mac等平台相关的二进制文件)当然你会失去可移植性,但如果这不重要,那就继续吧。
<强>更新强>
问题是你想通过创建一个exe来实现什么:
便利性:Windows上的用户更喜欢点击图标,对于非极客来说尤其如此。另一方面,非极客如果启动exe或其他东西,则不关心内部链接的作用。您也可以拥有非本机Java应用程序的应用程序图标。替代方案将是
性能:如果将Java应用程序编译为本机解决方案,您可能会获得一些性能,但这取决于您使用的技术。例如,Swing往往很慢但是将其编译为本机则相当棘手。如果您使用SWT而不是已经使用本机组件的Swing,则无需进一步的本机编译。另一方面,最近的JVM运行良好,可以将java编译为native,以进一步改善性能瓶颈。这是在你不需要担心的背景上默默地完成的。
总结:在某些情况下,它可能是唯一的解决方案,但如果您选择合适的技术,将会有许多基于Java的替代解决方案来实现相同的目标。
答案 4 :(得分:1)
问题中链接背后的页面是由销售将java编译为本机代码的产品的公司编写的。我不会仅就此作出决定。
该问题还表明,exe的优势在于用户体验更好,因为用户只需双击即可启动应用程序。
可执行jar文件可能。实际上,使用Java运行时中的标准工具实际上非常容易。您只需要向jar文件添加清单,并指定包含main的类。您还可以在类路径中指定相对于主jar文件位置的其他jar文件。您还可以指定要用作初始屏幕的图像作为资源。
e.g。
Class-Path: lib/derby.jar lib/derbytools.jar lib/jcalendar-1.3.2.jar l
ib/joda-time-1.4.jar lib/log4j-1.2.14.jar lib/looks-2.2.1.jar lib/swi
ng-layout-1.0.jar
SplashScreen-Image: resources/splash.png
Main-Class: com.you.pkg.app.Main
Netbeans中的基本蚂蚁项目如果您使用它,将为您完成除了spash-screen之外的所有项目。如果您想要手动完成所有这些操作,请确保您了解清单文件的格式,它有点挑剔。
答案 5 :(得分:0)
作为Linux,mac。,Solaris用户我认为这是个坏主意。 如果您想在Windows上更快地部署,只需创建安装程序。
答案 6 :(得分:0)
Jar文件提供许多好处,包括: 压缩:整个应用程序(即所有类文件)存储在一个存档文件中(如果需要,可以包含图像和声音文件)。 易于使用:双击可以运行应用程序。 压缩:jar格式允许您压缩文件以实现高效存储。 安全性:您可以对jar文件的内容进行数字签名。然后,识别您的签名的用户可以选择授予您不具备的软件安全权限。
我不会转换为exe。
大多数Windows应用程序都是从.exe文件(Word,Internet Explorer,FireFox,NetBeans等)运行的 Java本身不支持这样做,因为可执行文件将依赖于平台(即它不能在Mac上运行) 但是,有(免费)应用程序可以为您执行此操作。
答案 7 :(得分:0)
Minecraft做到了,所以一定是个好主意! 除了所有的笑话,要明白这不是你想要的'转换',而是使用自定义启动器。您链接的文章很好地解释了每种方法的不同方法和优缺点。作为一般概念,它需要额外的工作来创建启动器(以及每个不同的OS体系结构的不同版本),但它提供了更多的控制(版本检查是一个很好的功能,你也可以更新应用程序jar很容易,像Minecraft一样)。总的来说,如果您认为值得付出努力,并且(轻微)可移植性损失,那么这是一个好主意。
编辑:如果您不需要下面提供的那些非常漂亮的额外功能,那么您应该使用'自定义Java启动程序和包装程序'方法。
答案 8 :(得分:0)
取决于用户群。如果它们与技术有关,那么给它们一个.jar
文件(可以通过双击运行)对于移动性来说是一个好主意。
如果您的用户不那么熟练,但仍然需要它在多个平台上运行,请将其包装为Windows的exe
和Mac的.app
。
重要:我建议制作一个脚本将其包装到exe中,这样每次有新版本时都会运行它。