我目前正在处理一个 jar 文件,很快就会分发它。我期待着为用户分发它,而无需他安装 JRE 来运行我的应用程序。我很了解像 Jar2Exe 这样的工具但这些工具会向可执行文件注入(inject)一些额外的内容,我不会为此购买许可证!所以我正在研究解决方案。我有这个想法,所以我将创建一个包含此内容的 C 文件(我在诞生时使用 C 语言功能!):
#include <stdlib.h>
int main() {
system("java -jar test.jar");
return 0;
}
我会将 jar 文件和上面的 C 文件的编译文件以及位于 JRE 安装目录中的 java.exe 放在同一目录中,这应该可以工作,但肯定有一堆 dll java.exe
取决于他们!将这些依赖项全部放在一个目录中并使这个想法发挥作用的列表将非常有帮助:)
请注意:我不想从 JAR 文件创建可执行文件,我只希望用户不需要安装 JRE。
编辑
<小时/>我意识到上述方法并不实用,所以我将在幕后安装 JRE(我唯一的目标是用户不会发现安装过程中发生了什么)我将复制 required文件发送至ProgramFiles/jre_version
但我还应该做什么呢?换句话说,JRE 安装程序在幕后做了什么?
最佳答案
您认为其他公司为什么要您为他们的产品付费?
提示:因为这并不那么容易。
重点是,不仅需要您的 JAR 文件。您需要使您的代码将使用的每个类可供您正在启动的 JVM 使用。
您知道,这些商业工具支持到其 EXE 文件中的正是其他内容;你认为这些东西使得他们的 EXE 文件变得又大又慢。这就是运行 java 类所需的东西...
仅 JRE 就附带了数兆字节的 Java 类,打包在各种 JAR 中。您正在使用的任何第 3 方库也将是必需的。
因此,当然,当您能够找到执行代码时将加载的所有类时,您可以手动将其打包到单个 JAR 中。但正如所说:如果这是一项容易的任务,那么其他人就不会有太多的商业案例。当然:一旦反射和 Class.forName() 启动,你就彻底崩溃了。因为你根本无法预测,那么在运行时会使用哪些类。
关于java - 手动安装JRE到用户电脑的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38226605/