Javafx 2 减少JavaFx包中JRE的大小

Javafx 2 减少JavaFx包中JRE的大小,javafx-2,bundle,java,Javafx 2,Bundle,Java,我创建了一个JavaFX应用程序,为此我使用Java Runtime的私有副本将它捆绑成一个独立的独立应用程序 但这变成了我的应用程序的166MB大小,其中146MB是用于jre的 我如何减少应用程序的大小,或者说是捆绑运行时JRE的大小 我读到一些文件在jre中是可选的,所以我尝试在删除这些文件后运行我的应用程序,但无法运行该应用程序 那么,如何从应用程序的运行时JRE中删除未使用的文件/文件夹/模块呢 就是 默认情况下,只包括Java运行时的一个子集。一些可选的 并排除很少使用的文件以减小包

我创建了一个JavaFX应用程序,为此我使用Java Runtime的私有副本将它捆绑成一个独立的独立应用程序

但这变成了我的应用程序的166MB大小,其中146MB是用于jre的

我如何减少应用程序的大小,或者说是捆绑运行时JRE的大小

我读到一些文件在jre中是可选的,所以我尝试在删除这些文件后运行我的应用程序,但无法运行该应用程序

那么,如何从应用程序的运行时JRE中删除未使用的文件/文件夹/模块呢

就是

默认情况下,只包括Java运行时的一个子集。一些可选的 并排除很少使用的文件以减小包大小,例如 所有可执行文件。如果你需要的东西不包括在 默认情况下,则需要将其作为后处理步骤进行复制

因此,默认情况下,它不会在jre中添加所有文件,在这种情况下,我的应用程序不会运行。Application.jar在使用系统jar时工作正常。 因此,我在后处理步骤中添加了所有铰孔文件


谢谢

Jigsaw项目似乎对这方面有所帮助

但它看起来最早会出现在Java9中

因此,据我从你的帖子中了解到的,你不能用JavaFX提供的缩小的JRE大小来运行你的应用程序。此外,您尝试了详细的步骤,但仍然无法运行应用程序

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

如果您正在使用来组装捆绑包,那么只需在平台元素中将basedir属性定义为空字符串,如本例所示:

        <fx:platform basedir="">
            <fx:jvmarg value="-Xmx768m" />
        </fx:platform>


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

不幸的是,使用Java 8无法删除未使用的文件

要减小应用程序大小,可以使用本机操作系统安装程序

Windows Exe安装程序的大小应在50 MB左右,并且
Mac OS X DMG安装程序大约为60MB

也许你可以试用ProGuard(),它还可以删除未使用的字段、类(“shrink”)。顺便问一句,你是否有理由将Java打包到应用程序中而不让用户安装它?@Adrian请查看更新。对于不想在系统上安装Java的用户。看看这个:如果我们不使用ant任务呢?还有什么其他工具可以推荐?请提供拒绝投票的原因,以便改进答案。尤其是当对4年前的答案投反对票时。似乎有人只是因为无聊而投反对票。我们对此无能为力。我在你的回答中没有看到任何需要改进的地方,尽管理论上是正确的,但我不会期望任何将JavaFX应用程序与缩小的JRE捆绑在一起的尝试,即使是Jigsaw,因为JavaFX本身是JRE中最大的模块。