如果我有一个 Java 源文件 (*.java) 或一个类文件 (*.class),我该如何将其转换为 .exe 文件?我还需要一个程序的安装程序。
如果我有一个 Java 源文件 (*.java) 或一个类文件 (*.class),我该如何将其转换为 .exe 文件?
我的程序还需要一个安装程序。
从 JDK14 开始, jpackage 取代了 javapackager
@Jay 回答中提到的内容。Windows 版本需要 Wix 3.0,使用 Java 应用程序并构建提供 EXE 启动器的安装程序相当简单。
一起使用 jlink ,构建精简版 Java 运行时映像,该映像与安装程序捆绑在一起,仅包含支持应用程序所需的一组模块。 jlink
如果未指定运行时,jpackage 也会隐式运行该步骤,但我更喜欢单独制作 JRE 映像,因为它只会在您更新 JDK 或向项目添加新的模块依赖项时发生变化。
Java 类的主要示例:
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]);
}
}
}
以下是在 Windows 上构建的示例步骤 - 显然您需要设置本地构建环境(Maven / ant / etc)来重现此操作:
mkdir jpackage.input\jars tmp
javac -d tmp src\exe\Main.java
pushd tmp && jar cvf ..\jpackage.input\jars\myapp.jar . && popd
检查其运行:
java -cp jpackage.input\jars\myapp.jar exe.Main X Y Z
使用 jlink 为应用程序使用的模块集创建运行时映像:
set jlink.modules=java.base
jlink --add-modules %jlink.modules% --strip-debug --no-man-pages --no-header-files --compress=1 --output jpackage.jre
如果缺少上述模块,您应该检查 jlink JRE 运行时映像是否可以运行您的应用程序:
jpackage.jre\bin\java -cp jpackage.input\jars\myapp.jar exe.Main X Y Z
使用 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
运行安装程序:
jpackage.dest\MyApp-%appver%.exe
测试应用程序:
"C:\Program Files\MyApp\MyApp.exe" ONE 2 THREE
... Prints system properties ...
args[0]=ONE
args[1]=2
args[2]=THREE