减小JavaFx捆绑包中JRE的大小

17

我创建了一个JavaFX应用程序,将其打包为自包含独立应用程序,并使用Java Runtime的私有副本

但是这使我的应用程序大小达到166MB,其中146MB为jre大小。

我该如何减小我的应用程序或者说捆绑在Runtime JRE中的大小?

我在某处读到一些文件在jre中是可选的。因此,我尝试删除这些文件后运行我的应用程序,但无法运行应用程序。

那么,我如何为我的应用程序从Runtime JRE中删除未使用的文件/文件夹/模块?

据说

默认情况下只包含Java Runtime的子集。为了减少软件包的大小,一些可选和很少使用的文件被排除在外,例如所有可执行文件。如果您需要某些默认未包含的内容,则需要将它作为后处理步骤复制进去。

默认情况下,它不会添加jre中的所有文件,这种情况下我的应用程序无法运行。由于使用了系统jar,Application.jar可以正常工作。因此我需要在后处理步骤中添加所有剩余的文件。
谢谢。

1
也许你可以尝试使用ProGuard(http://proguard.sourceforge.net/)。它还可以删除未使用的字段、类(“缩小”)。 - Adrian
3
对于不想在系统上安装Java的人。 - Ronak Jain
1
请看这个:https://dev59.com/Em855IYBdhLWcg3wXTAI?rq=1 - keuleJ
我认为真正的问题是,为什么166 MB的大小是无法容忍的?这可能只是几分硬盘空间。这是要放在某些嵌入式设备上吗? - Thorn G
我刚试了一个hello world应用,并使用javafxpackager -makeall -appclass application.Main -name test创建了一个可执行文件。它有整整189mb大!我想要将其用于客户的简单应用程序,而不需要额外的安装说明。我必须考虑另一种解决方案。 - A.W.
显示剩余2条评论
3个回答

3

项目Jigsaw似乎有帮助解决这个问题的希望。

但是它看起来最早也要在Java 9中发布。

根据您的帖子,我理解您无法使用JavaFX提供的减小JRE大小运行应用程序。此外,您尝试了这里详细介绍的步骤,但仍然无法运行应用程序。

许多应用程序可以在JavaFX包装的JRE中可用的有限数量的类中正常运行。也许您可以检查使用哪些Java库会导致此问题。然后,您可以探索这些库的替代方案。最后,您需要测试这些替代库是否比JavaFX包装中的空间减少更大或更小。


请提供一个下投票的理由,以便回答可以得到改进。特别是在对一个四年前的回答进行下投票时。 - Splaktar
2
似乎有些人只是因为无聊而进行负面评价。我们对此无能为力。我没有看到你的回答中需要改进的地方,尽管从理论上讲,即使使用Jigsaw将JavaFX应用程序与缩小版JRE捆绑在一起,我也不会对其有太多期望,因为JavaFX本身就是JRE的最大模块。 - Holger

0
如果你正在使用JavaFX ant tasks来组装你的包,那么只需在platform元素中将basedir属性定义为空字符串,就像这个例子中一样:
        <fx:platform basedir="">
            <fx:jvmarg value="-Xmx768m" />
        </fx:platform>

这将打包您的应用程序及其依赖项,但不包括JRE本身。


如果我们不使用Ant任务,您会推荐使用哪些其他工具? - Wilo Maldonado

0

很遗憾,使用Java 8无法删除未使用的文件。

为了减小应用程序的大小,您可以使用本机操作系统安装程序。

Windows Exe安装程序的大小应该约为50 MB,Mac OS X DMG安装程序的大小约为60MB。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接