当前位置: 首页 > 知识库问答 >
问题:

不绑定JRE的Mac和Windows Jar文件打包

居乐池
2023-03-14

我将IntelliJ IDEA作为jar文件构建在javaFX应用程序中。使用“Project Structure>>Artifacts>>>+JavaFX Application”,我可以构建。app、.dmg、.pkg、.exe,并包含JRE。但我需要构建相同的文件没有JRE捆绑。当然,我可以使用JAR,但我想做我自己的图标,也许安装程序。

我还尝试从jar创建.app文件夹,以手动执行它“java-jar myjarname.jar”,但是如果我有几个JDK版本,它总是使用最新的(JRE11),其中不包括javaFX库,而且我的.app不工作。但是如果我用JAR launcher.app运行同一个JAR,它可以完美地工作。它选择了正确的jre版本。ExcelsiorJet,install4j和类似的应用程序工作得很好,但我的项目是OpenSource,我不能为此支付3000美元。

问题是--我如何为已经安装了JRE的用户构建没有JRE绑定的MacOS/Windows原生启动器应用程序/dmg/pkg/exe?我可以使用IntelliJ IDEA来构建这种方式吗,就像我用jre绑定构建的那样?

共有1个答案

羊越
2023-03-14

好吧,看来我找到了一些不正常的方法

Windows解决方案:

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

#!/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
 类似资料:
  • 我很难将javafx应用程序构建到中。应用程序(适用于mac)。我找到了一种合法的方法,以下是相关资源:http://docs.oracle.com/javafx/2/deployment/deploy_quick_start.htm然而,这远远不是我想要的。通过遵循该教程,我成功地从我的javafx项目中构建了一个应用程序,然而文件的大小太荒谬了,这是因为整个JRE都被捆绑在里面了。我现在正在寻

  • 我有一个基于Java 6的Java Web Start应用程序,需要在Windows机器上打开。机器安装了JRE 7,并将JRE 6手动复制到程序文件文件夹中。问题是,每当我想打开JWS应用程序时,它都会使用Java 7打开。即使我使用JRE 6中的可执行文件javaws,一些属性仍然引用JRE 7文件(我通过使用javaws-verbose app.jnlp验证了这一点)。如何仅针对此应用程序强

  • 问题内容: 我有一个需要在Windows机器上打开的基于Java 6的Java Web Start应用程序。机器已安装JRE 7,并将JRE 6手动复制到该文件夹中。问题是,无论何时我想打开JWS应用程序,它都将使用Java 7打开。即使我使用JRE 6中的可执行文件,某些属性仍然引用JRE 7文件(我通过使用进行了验证。如何强制JRE 6仅用于此应用? 问题答案: 我有一个基于Java 6的Ja

  • 我正在为Mac计算机创建一个JAVA桌面应用程序,使用jpack将所需的JRE捆绑到应用程序中,最后将. app发送给客户。 对于新的m1苹果arm硅计算机,我不想使用正确的JRE(intel)为每个处理器架构创建不同的应用程序 我试图创建两个。应用程序和使用mac命令行中的lipo工具,但这并不能真正起作用。 有什么建议吗?

  • 我正在构建Mac(10.10.5)安装程序与install4j和捆绑JRE选项在媒体步骤。 在创建安装程序后,当我安装我的应用程序时,在应用程序文件夹中没有生成JRE文件夹。我怎么才能拿到这个?

  • 问题内容: 从下一个版本的Mac OS X开始,Java将不再包含在系统中,并且我不想强迫客户自己安装它。因此,我想做我在Windows上所做的事情- 将其与我的应用捆绑在一起。它还给了我一些希望,使其可以包含在Mac App Store中。 我可以在哪里下载可以包含在应用程序中的Mac OS X JRE?还是可以只复制Mac上安装的一个? 问题答案: 更新(4/15/2013): 正如Thorb