如何将JAR文件转换为EXE文件?

23

我想创建一个JAR文件并在客户机上运行它。所以,我有几个问题:

  1. 如何将JAR文件转换为EXE文件?
  2. 如何加密JAR文件的内容?JAR文件可以通过WinRAR提取,并且类可以使用任何Java反编译器进行反编译。
  3. 如何创建安装程序?我的客户端没有任何JVM,我不想随JDK或JRE一起运送,因为它们体积很大。

如果你将jar转换为exe(我猜是在Windows上?),它可能会将一半的jre打包进exe以满足依赖关系。 - extraneon
http://yuvadeveloper.blogspot.com/2009/03/convert-jar-files-to-exe.html - user427776
9个回答

18
  1. 请查看此链接:Java to Exe,它还解释了这样做的合理原因以及何时不应该这样做。

  2. 你实际上不能加密二进制文件,因为计算机必须理解它们。尽管如此,经过优化的可执行文件很难反编译,而普通类文件则很容易。

  3. 如果您拥有一个exe文件,那么已经有足够的安装程序了。


链接无效,介绍实际解决方案是回答问题的更好方式(告诉应该使用的程序或必须遵循的过程)。 - Roalt
链接指向Java到Exe的应该修改为https://web.archive.org/web/20181117071040/http://www.excelsior-usa.com/articles/java-to-exe.html。 - Anjana

9

JSmooth是一个应用程序,它将把你的Jar包装成exe可执行文件。

它还允许你检查部署系统上是否有正确版本的JRE可用。

http://jsmooth.sourceforge.net/


4

关于第1点:我猜你不能这样做。可能有工具可用,但是你不能使用JDK附带的标准工具来完成此操作,因为它会破坏平台独立性。(请参阅其他提供此类第三方工具链接的答案)

关于第3点:使用InnoSetup创建安装程序。在安装程序中包含JRE,并让InnoSetup实时安装。


我并不认为平台无关性是一个必要条件。你通常会针对一个受众,而不是一个平台。如果他们已经标准化了一个环境,那你可以针对并测试这个环境。 - extraneon
我的意思是这样的工具不会随JDK一起发布,因为它需要考虑到平台独立性。JDK提供了构建和打包任何平台上的应用程序所需的工具。 - Thorsten Dittmar

4

你无法防止反编译。你所能做的最好的办法是使其更加困难或耗时。关于你的问题,我认为你可以使用 gcj 将Java编译成EXE文件。


2
+1 表示认同防止逆向工程的无用性。 - Stephen C

3
也许 Excelsior JET 可以满足你的需求。我个人认为这是一款非常成熟的产品。

3

1) 我最近尝试了这个程序jarToExe,并且非常喜欢它。一些功能包括:

  • 免费基础版本或者很便宜的企业版($30)
  • 能够让Windows任务管理器显示你的应用程序名称而不是默认的java.exe
  • 额外的混淆
  • 运行时检查Java是否已安装

2) 你可以使用proguard或其他混淆器使反向工程更加困难。

3) nsis是一个非常强大的、免费的脚本语言,用于创建Windows安装程序。网站维基上有良好的文档,也有Stack Overflow上的支持。


2

Launch4j 对于我来说很有用,因为一些工具没有起作用。它还有一个很好的指南here

希望这可以帮到你!


0
1)要创建exe文件,您可以使用Launch4j
2)据我所见,您无法加密jar文件的内容。不过我不确定。
3)要创建安装程序,您可以使用刚刚创建的exe文件,并使用InnoSetup创建文件。您必须在安装程序中嵌入jre以及可能在运行时需要的任何其他库和额外文件。当嵌入jre时,安装程序会变得很大,如果您想避免这种情况,可以要求客户在机器上安装Java。这样,您就不需要随附jre了。

0

我们使用7zip SFX安装启动器。这是一个开源的简单工具。它将打包您的JAR文件、JRE版本,因此在安装系统上不必要安装JRE,以及7zip自解压版本。这里有一个教程,讲述如何捆绑和GitHub 链接。 该项目没有进行维护,但在Java 1.8之前都能完美运行(已经过测试)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接