我需要.jar在没有安装 jre 的机器上运行我的文件,我找到了一种方法来做到这一点。我执行以下操作:
- 我创建了一个任意名称的文件夹;
- 我把我的放进去
jar; - 我将带有
jre(版本 1.8.0_181)的文件夹复制到同一个地方; - 我创建一个 run.bat 文件并在其中写入以下内容:
jre\bin\java.exe -jar MyJar.jar
- 我在另一台没有安装 jre 的计算机上运行所有这些。
它有效!但是这种方法虽然有效,但非常不愉快:我的 jar 文件的大小只有 10 KB,而 jre 的大小是 180 MB!
我真的很想减少这个 jre 的大小。是否可以?我听说过类似 的程序launch4j,但我不确定这是否是我需要的。launch4j允许您“缝合”到jre,但恐怕我只会得到180 MB。jarexeexe
如果有的话,您需要在 Windows 上运行 jar。
如果有什么不清楚的地方,写在评论中,我会补充问题。
关于launch4j的补充: 我的目标不是打包成exe,而是在上述情况下减少jre的大小。launch4j可以把jre和jar打包成一个exe吗?如果可以,那么 exe 输出的大小将等于大小 (jre) + 大小 (jar)?
还有一个补充: 是否可以只从 jre 中删除一些东西?jre 版本 8 包括对 javafx 的支持,我绝对不需要运行它。是否可以删除负责运行 javafx 应用程序的所有内容?以及如何去做?
另一种选择是删除未使用的库,我和 Java 机器都不会出于技术目的使用这些库。也许这是可能的?这是我正在使用的库列表:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.MenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
获取新的 JDK(至少 17 LTS)。分析(使用
jdeps)您的程序使用了哪些模块。根据结果,要么生成一个包含必要模块的 JRE(使用jlink),要么立即用它们制作一个启动器(使用jpackage)。使用带有 GraalVM Native Image 的本地编译。