为了账号安全,请及时绑定邮箱和手机立即绑定

打包适用于没有 JRE 的 Mac 和 Windows 的 Jar 文件

打包适用于没有 JRE 的 Mac 和 Windows 的 Jar 文件

陪伴而非守候 2022-01-12 14:04:34
我在 IntelliJ IDEA 中将我的 javaFX 应用程序构建为jar文件。使用“项目结构 >> 工件 >> + JavaFX 应用程序”,我可以构建包含 JRE 的 .app、.dmg、.pkg、.exe。但是我需要构建没有捆绑 JRE 的相同文件。当然,我可以使用 JAR,但我想制作自己的图标和安装程序。我还尝试从jar创建 .app 文件夹以手动执行它“ java -jar myJarName.jar ”,但如果我有多个 JDK 版本 - 它总是使用不包含 javaFX 库的最新(JRE 11)库,而我的 .app 不不行。但是,如果我使用Jar Launcher.app运行相同的 JAR,它就会完美运行。不知何故,它选择了正确的 jre 版本。ExcelsiorJet、install4j 和类似的应用程序运行良好,但我的项目是开源的,我不能为此支付 3000 美元。问题是 - 如何为已经安装 JRE 的用户构建 MacOs/Windows 原生启动器 app/dmg/pkg/exe 而不捆绑 JRE?我可以使用 IntelliJ IDEA 来构建这种方式,就像我使用捆绑的 jre 构建的那样吗?
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超4个赞

好的,看起来我找到了一些弯曲的方法来完成这一切。

窗户解决方案:

在 Windows 上捆绑很容易使用launch4j(仅限 Windows)。它是免费的,创建没有捆绑 Jre 的.exe也没有问题。

macOS 解决方案:

对于 MacOS,这有点困难:

  1. 创建 myApplication.app 文件夹并设计它的结构

//img1.sycdn.imooc.com//61de6fad0001ff1601970166.jpg

编写启动器 bash 脚本:在我的情况下,我应该检测安装了哪些 Jre 版本并选择java 1.8和10之间的任何一个

我不知道 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来工作。


查看完整回答
反对 回复 2022-01-12
  • 1 回答
  • 0 关注
  • 220 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号