我正在使用gradle macappbundle将JRE与我在Mac上的JavaFX应用程序捆绑在一起。我正在尝试减小JRE的大小,这样我就不必包含完整的~200 MB。我已经按照Java8自述中的说明删除了一些可选组件。
在macappbundle插件创建.app之后,我想在JRE上运行Proguard(我正在为它使用gradle插件(,以删除更多未使用的类。
我当前的proguard规则:
task shrinkJRE(type: ProGuardTask, dependsOn: 'createApp') {
injars "build/macApp/"
outjars "build/libs/pro/"
keep "class java.** { *; }"
ignorewarnings()
dontobfuscate()
dontoptimize()
}
这将生成大约45 MB的JRE。
但是在对JavaAppLauncher
可执行文件执行chmod +x
并运行它之后,它显示了以下错误:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x000000010c6025e4, pid=86901, tid=0x0000000000002303
#
# JRE version: (8.0_181-b13) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.181-b13 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# V [libjvm.dylib+0x5825e4] universe_post_init()+0x6a9
#
# Core dump written. Default location: /cores/core or core.86901
#
# An error report file with more information is saved as:
# /Users/rishiraja/hs_err_pid86901.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
Abort trap: 6 (core dumped)
有人能帮我找出这个错误的原因吗?
我的猜测是,我缺少JRE所需的一些类,那么我可能还需要"保留"哪些类呢?
官方支持的替代方法现在是jlink和jpackage。使用jlink的gradle插件可以非常容易地生成用于分发的小程序包。