Сергей Гуков Asked:2020-11-25 03:49:11 +0000 UTC2020-11-25 03:49:11 +0000 UTC 2020-11-25 03:49:11 +0000 UTC 有没有办法让 jar 文件在没有安装 JRE 的计算机上运行?也许可以在里面注入一些东西? 772 有一个Javafx应用程序,它从哪里开始,当然,哪里有jre。有没有办法让 jar 文件在没有安装 JRE 的计算机上运行?也许可以在里面注入一些东西? java 4 个回答 Voted Best Answer Mark 2020-11-25T06:39:36Z2020-11-25T06:39:36Z 如果你使用 IntellijIDEA,可以使用内置的离线文件生成机制 创建工件: 文件 -> 项目结构 -> 项目 Settinfs -> 工件 -> + -> javaFX 应用程序 -> 从模块“您的模块名称” 在选项卡的右侧,JavaFX设置: Application Class:带有入口点的类 - main Native Bondle:All方法 检查Output directory正确设置的内容(默认为out\artifacts您的项目文件夹) 构建工件: 构建 -> 构建工件 -> '你的工件' -> 构建 out/artifacts/将出现一个目录,其中包含可执行文件ваш артефакт.exe和所需的执行环境。 通过将该文件夹复制到另一台计算机,您可以在不安装 JRE 的情况下运行该项目。您需要的所有内容都与可执行文件位于同一文件夹中。 0x666c 2020-11-25T04:54:51Z2020-11-25T04:54:51Z 这是可能的。 有一些特殊的程序可以提前编译您的代码(AOT 编译)并将其包装到您的操作系统可执行文件中,该可执行文件还包含一个可移植的 JRE。 我知道一个,它叫做Excelsior JET,虽然我没有在 javafx 应用程序中使用它,但它在标准库和 swing 中运行良好。 Sergey Gornostaev 2020-11-25T12:17:46Z2020-11-25T12:17:46Z 一种常用的方法是下载launch4j,将其设置为您的 jar 文件并获取可执行文件。实际上,这是一个自解压存档,其中包含启动器、JRE 和原始文件,但用户看不到。 更正确的方法是使用jlink: 一个简单项目的目录结构 src └───com.example │ module-info.java │ └───com └───example App.java 模块信息.java module com.example { } 应用程序.java package com.example; public class App { public static void main(String[] args) { System.out.println("Hello World!"); } } 构建命令 javac -d build\mods\com.example src\com.example\module-info.java src\com.example\com\example\App.java jar --create --file=build\libs\com.example.jar --main-class=com.example.App -C build\mods\com.example . jlink --module-path build\mods --add-modules com.example --output build\app\example --launcher start=com.example/com.example.App --compress=2 --no-header-files --no-man-pages --strip-debug 结果,示例应用程序目录将出现在build\app目录中,其中包含 JRE 和程序本身,其形式可用于分发。使用批处理文件执行启动 - example\bin\start.bat 自然,最好不要手动键入命令,而是将其委托给收集器 - Maven 或 Gradle。 invzbl3 2020-05-25T03:14:19Z2020-05-25T03:14:19Z Launch4J 在行动: 1)创建一个新文件夹并将jre文件放在jar那里: Basic2) 在重要字段部分配置 Launch4J Output file,jar因此: 3)在部分中,JRE指定jre文件夹中的内容: 4)并指定Build Wrapper配置文件的名称(构建完成后,必要时可以删除): 5)重要的一点:为了exe在任何 PC 上运行文件,它必须与文件位于同一文件夹中jre: 为了便于分发,您可以存档jre和exe. Ps这当然不是最好的解决方案,但它也很有用。
如果你使用 IntellijIDEA,可以使用内置的离线文件生成机制
文件 -> 项目结构 -> 项目 Settinfs -> 工件 ->
+-> javaFX 应用程序 -> 从模块“您的模块名称”在选项卡的右侧,
JavaFX设置:Application Class:带有入口点的类 -mainNative Bondle:All方法检查
Output directory正确设置的内容(默认为out\artifacts您的项目文件夹)构建 -> 构建工件 -> '你的工件' -> 构建
out/artifacts/将出现一个目录,其中包含可执行文件ваш артефакт.exe和所需的执行环境。通过将该文件夹复制到另一台计算机,您可以在不安装 JRE 的情况下运行该项目。您需要的所有内容都与可执行文件位于同一文件夹中。
这是可能的。
有一些特殊的程序可以提前编译您的代码(AOT 编译)并将其包装到您的操作系统可执行文件中,该可执行文件还包含一个可移植的 JRE。
我知道一个,它叫做Excelsior JET,虽然我没有在 javafx 应用程序中使用它,但它在标准库和 swing 中运行良好。
一种常用的方法是下载launch4j,将其设置为您的 jar 文件并获取可执行文件。实际上,这是一个自解压存档,其中包含启动器、JRE 和原始文件,但用户看不到。
更正确的方法是使用jlink:
一个简单项目的目录结构
模块信息.java
应用程序.java
构建命令
结果,示例应用程序目录将出现在build\app目录中,其中包含 JRE 和程序本身,其形式可用于分发。使用批处理文件执行启动 - example\bin\start.bat
自然,最好不要手动键入命令,而是将其委托给收集器 - Maven 或 Gradle。
Launch4J 在行动:
1)创建一个新文件夹并将
jre文件放在jar那里:Basic2) 在重要字段部分配置 Launch4JOutput file,jar因此:3)在部分中,
JRE指定jre文件夹中的内容:4)并指定
Build Wrapper配置文件的名称(构建完成后,必要时可以删除):5)重要的一点:为了
exe在任何 PC 上运行文件,它必须与文件位于同一文件夹中jre:为了便于分发,您可以存档
jre和exe.Ps这当然不是最好的解决方案,但它也很有用。