我目前正在处理一个jar文件,我很快就会发布它。我期待着为用户分发它而无需安装JRE来运行我的应用程序。我很清楚像Jar2Exe这样的工具,但这些工具为可执行文件注入了一些额外的内容,我不会为此购买许可证!所以我正在研究解决方案。我有这个想法,所以我将用这个内容创建一个C文件(我正在使用C语言的力量诞生!):
#include <stdlib.h>
int main() {
system("java -jar test.jar");
return 0;
}
我将把上面的C文件的jar文件和编译文件以及位于我的JRE安装目录中的java.exe放在同一个目录中,这应该可行但是肯定有一堆dll {{1}取决于他们!将它们全部放在目录中并使想法有效的依赖列表将非常有用:)
请注意:我不想从JAR文件创建可执行文件,我只希望用户不需要安装 JRE。
修改
我意识到上述方法并不实用,所以我将在幕后安装JRE(我唯一的目标是用户不知道安装过程中发生了什么)我是要将所需文件复制到java.exe
,但我还应该做些什么呢?换句话说,JRE安装程序在幕后做了什么?
答案 0 :(得分:1)
为什么你认为其他公司希望你为他们的产品付钱?
提示:因为它很容易。
重点是,不仅需要您的 JAR文件。您需要将您的代码将使用的每个类和任何类提供给您正在启动的JVM。
你知道,正是那些商业工具支持到他们的EXE文件中的其他东西;你认为他们的EXE文件如此庞大和缓慢的东西。这就是运行java类所需的东西......
仅JRE就带有兆字节和兆字节的java类,包装在各种JAR中。并且还需要您正在使用的任何第三方库。
因此,当然,当您能够找到将在执行代码时加载的所有类时,您可以手动将其打包到单个JAR中。但正如所说:如果这是一件容易的事,那些其他人就不会有很多商业案例。当然:一旦反思和Class.forName()
开始,你就完全被打破了。因为你根本无法预测,那么将在运行时使用哪些类。