[英]Packaging Jar file for Mac and Windows without JRE bundled
我在IntelliJ IDEA中构建了我的javaFX应用程序作为jar文件。 使用“ 项目结构>>工件>> + JavaFX应用程序 ”我可以使用JRE构建.app,.dmg,.pkg,.exe。 但我需要在没有捆绑JRE的情况下构建相同的文件。 当然,我可以使用JAR,但我想制作自己的图标,也许是安装程序。
我也尝试从jar创建.app文件夹来手动执行它“ java -jar myJarName.jar ”,但如果我有几个JDK版本 - 它总是使用最新的(JRE 11),它不包括javaFX库和我的.app不不行。 但是,如果我使用Jar Launcher.app运行相同的JAR,它就能完美运行。 不知何故,它选择了正确的jre版本。 ExcelsiorJet,install4j和类似的应用程序运行良好,但我的项目是OpenSource,我不能支付3000美元。
问题是 - 如何为没有安装JRE的用户捆绑JRE而构建MacOs / Windows本机启动器app / dmg / pkg / exe? 我可以使用IntelliJ IDEA构建这种方式,因为我使用jre捆绑构建了吗?
好吧,看起来我找到了一些弯曲的方式来做到这一切。
Windows解决方案:
要在Windows上捆绑,很容易使用launch4j (仅限Windows)。 它是免费的,创建没有Jre捆绑的.exe是没有问题的。
MacOS解决方案:
对于MacOS来说,这有点困难:
我不知道bash脚本语言,我相信我是以未经优化的方式编写的。 如果有人纠正我,我会很高兴。 无论如何,它按照我想要的方式工作:
#!/bin/sh
# set the working directory
DIR=$(cd "$(dirname "$0")"; pwd)
# extract first fit java version installed
jre_path=$(/usr/libexec/java_home -V 2>&1 |
while IFS= read -r line
do
if [[ "$jre_found" == "true" ]]; then
break
fi
version=$(echo $line | cut -d ' ' -f 1|sed 's/^ *//;s/ *$//' | cut -d ' ' -f 1 | sed 's/^ *//;s/ *$//')
major=$(echo $version | cut -d. -f1)
minor=$(echo $version | cut -d. -f2)
array=(${line// /})
array_size=${#array[@]}
let "last_index=array_size-1"
path=${array[ $last_index ]}
if [[ $major == 1 ]]; then
if [[ $minor -gt 7 && $minor -lt 11 ]]; then
echo $path
jre_found="true"
fi
elif [[ $major -gt 7 && $major -lt 11 ]]; then
echo $path
jre_found="true"
fi
done)
# execute our jar file
$jre_path/bin/java -jar "$DIR"/myApp.jar
现在一切都应该通过双击myApplication.app来工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.