Was*_*eem 488 java installer exe
如果我有一个Java源文件(*.java)或一个类文件(*.class),我该如何将其转换为.exe文件?
我还需要一个程序安装程序.
Jay*_*Jay 318
Java Packager工具编译,打包和准备Java和JavaFX应用程序以进行分发.javapackager命令是命令行版本.
- Oracle的文档
该javapackager
实用程序随JDK一起提供.它可以生成带有-native exe
标志的.exe文件,以及许多其他内容.
WinRun4j是Windows的java启动器.它是javaw.exe的替代品,具有以下优点:
- 使用INI文件指定classpath,main class,vm args,program args.
- 任务管理器中显示的自定义可执行文件名
- 额外的JVM args可以更灵活地使用内存.
- 用于自定义图标的内置图标替换器.
- [更多要点跟随]
- WinRun4J的网页
WinRun4J是一个开源实用程序.它有很多功能.
打包JAR,资产和JVM以便在Windows,Linux和Mac OS X上进行分发,添加本机可执行文件以使其看起来像本机应用程序.Packr最适合GUI应用程序.
- packr自述文件
packr是另一个开源工具.
JSmooth是一个Java可执行包装器.它为您的Java应用程序创建本机Windows启动程序(标准.exe).它使java部署更加顺畅和用户友好,因为它能够自己找到任何已安装的Java VM.
- JSmooth的网站
JSmooth是开源的,具有功能,但它很老.最后一个版本是在2007年.
JexePack是一个命令行工具(非常适合自动脚本编写),允许您将Java应用程序(类文件),可选地及其资源(如GIF/JPG/TXT /等)打包到一个压缩的 32位Windows EXE中,使用Sun的Java Runtime Environment运行.支持控制台和窗口应用程序.
- JexePack的网站
JexePack是试用版.生产使用需要付款,使用此工具创建的exe文件将显示"提醒"而无需付款.此外,最后一个版本是在2013年.
InstallAnywhere使开发人员可以轻松地为任何平台创建专业的安装软件.借助InstallAnywhere,您可以快速适应行业变化,更快地进入市场并提供引人入胜的客户体验.在发货之前了解项目的OSS组件的漏洞.
- InstallAnywhere的网站
InstallAnywhere是一个商业/企业包,可为基于Java的程序生成安装程序.它可能能够创建.exe文件.
作为.exe文件的替代方法,您可以通过向JAR清单添加入口点来创建双击时自动运行的JAR文件.
关于这个主题的一个很好的信息来源是Excelsior的文章" 将Java转换为EXE - 为什么,何时,何时以及如何 ".
另请参阅配套文章" 最佳JAR到EXE转换工具,免费和商业 ".
coo*_*ird 35
更新: GCJ已经死了.它在2016 年正式从GCC项目中删除.甚至在此之前,它实际上已经放弃了七年,并且无论如何它都不能完全作为可行的替代Java实现.
去找另一个Java AOT编译器.
GCJ:GNU Compiler for Java可以将Java源代码编译为本机机器代码,包括Windows可执行文件.
虽然并非GCJ支持Java中的所有内容,尤其是GUI组件(请参阅 支持哪些Java API?支持的完整性是什么?来自FAQ的问题).我没有太多使用GCJ,但是从我对控制台应用程序进行的有限测试来看,它看起来很好.
使用GCJ创建独立可执行文件的一个缺点是生成的EXE的大小可能非常大.有一次我在GCJ中编译了一个简单的控制台应用程序,结果是一个大约1 MB的可执行文件.(可能有一些我不知道的方法.另一种选择是可执行的压缩程序.)
在开源安装程序方面,Nullsoft Scriptable Install System是一个可编写脚本的安装程序.如果您感到好奇,可以使用用户提供的示例来了解如何检测是否存在JRE,并在未安装所需的JRE时自动安装.(只是为了让你知道,我之前没有使用过NSIS.)
有关使用NSIS安装Java应用程序的更多信息,请查看我对 " 分发Java应用程序的最佳方式是什么? " 这一问题的回答.
小智 23
您可以使用以下代码创建批处理文件:
start javaw -jar JarFile.jar
Run Code Online (Sandbox Code Playgroud)
并使用任何.bat到.exe转换器将.bat转换为.exe.
Tho*_*sen 15
最新的Java Web Start已得到增强,可实现良好的脱机操作以及允许"本地安装".值得研究.
编辑2018:Java Web Start不再与最新的JDK捆绑在一起.Oracle正在推动"使用封闭的JRE在本地部署您的应用程序"模式.
Dun*_*ncG 13
从 JDK14 开始,jpackage取代了javapackager
@Jay 答案中提到的。Windows 版本需要 Wix 3.0,使用 java 应用程序并构建提供 EXE 启动器的安装程序相当简单。
它还可以与jlink一起使用来构建精简的 Java 运行时映像,该映像与安装程序捆绑在一起,并且仅包含支持应用程序所需的模块集。如果未指定运行时,该jlink
步骤也将由 jpackage 隐式运行,但我更喜欢单独制作 JRE 映像,因为它仅在您更新 JDK 或向项目添加新的模块依赖项时才会更改。
Java 类的 main 示例:
package exe;
public class Main {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]="+args[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下是在 Windows 上构建的示例步骤 - 显然您需要设置本地构建环境(Maven / ant / 等)来重新生成此内容:
mkdir jpackage.input\jars tmp
javac -d tmp src\exe\Main.java
pushd tmp && jar cvf ..\jpackage.input\jars\myapp.jar . && popd
Run Code Online (Sandbox Code Playgroud)
检查它是否运行:
java -cp jpackage.input\jars\myapp.jar exe.Main X Y Z
Run Code Online (Sandbox Code Playgroud)
使用 jlink 为应用程序使用的模块集创建运行时映像:
set jlink.modules=java.base
jlink --add-modules %jlink.modules% --strip-debug --no-man-pages --no-header-files --compress=1 --output jpackage.jre
Run Code Online (Sandbox Code Playgroud)
如果上面缺少模块,您应该检查 jlink JRE 运行时映像是否可以运行您的应用程序:
jpackage.jre\bin\java -cp jpackage.input\jars\myapp.jar exe.Main X Y Z
Run Code Online (Sandbox Code Playgroud)
使用 jpackage 生成安装程序,应用程序版本基于日期+小时(这节省了每次重新安装时卸载的需要)并打印出所有系统属性 - 测试后删除参数“-XshowSettings:properties”:
set appver=%date:~6,2%.%date:~3,2%.%date:~0,2%%time:~0,2%
jpackage --win-console --input jpackage.input --runtime-image jpackage.jre --app-version %appver% --type exe --name "MyApp" --dest jpackage.dest --java-options "-XshowSettings:properties" --main-jar jars\myapp.jar --main-class exe.Main
Run Code Online (Sandbox Code Playgroud)
运行安装程序:
jpackage.dest\MyApp-%appver%.exe
Run Code Online (Sandbox Code Playgroud)
测试应用程序:
"C:\Program Files\MyApp\MyApp.exe" ONE 2 THREE
... Prints system properties ...
args[0]=ONE
args[1]=2
args[2]=THREE
Run Code Online (Sandbox Code Playgroud)
小智 6
我会说launch4j是将java源代码(.java)转换为.exe文件的最佳工具你甚至可以用它来捆绑一个jre进行分发,甚至可以将exe图标化.虽然应用程序的大小增加,但即使用户没有安装jre,它也能确保应用程序完美运行.它还确保您能够提供应用程序所需的特定jre,而无需用户单独安装它.但不幸的是,java失去了它的重要性.它的多平台支持完全被忽略,最终应用程序仅支持Windows.但是,如果你只为Windows用户提供服务,这不是什么大问题.
我反对将 java 程序转换为 .exe 应用程序是可以原谅的,我有我的理由。主要的一个是 Java 程序可以从很多 IDE 编译成 jar 文件。当程序为 .jar 格式时,它可以在多个平台上运行,而 .exe 只能在非常有限的环境中运行。我赞成 Java 程序不应转换为 Exe 的想法,除非非常必要。人们总是可以编写运行 Java 程序的 .bat 文件,而它是一个 jar 文件。
如果确实需要将其转换为 exe,Jar2Exe 转换器会默默地执行此操作,并且还可以附加与主应用程序一起编译的库。
归档时间: |
|
查看次数: |
412504 次 |
最近记录: |