【问题标题】:How to create a jar file with gradle shadowJar that works on java 11如何使用适用于 java 11 的 gradle shadowJar 创建 jar 文件
【发布时间】:2021-05-21 07:53:30
【问题描述】:

我的 PC 上有 java 版本 15,当我使用 gradle shadowJar 创建一个带有 gradle 的 jar 文件时,该 jar 文件无法在我的 java 版本 11 的 mac 上运行。

这是我的项目设置,我已经在gradle设置页面把版本改成了java 11。

这是我的 mac 上的错误:

有没有快速解决这个问题的方法?

【问题讨论】:

  • 请不要截图文字..
  • 那么您是如何构建 jar 的?您说“使用 gradle”,但随后您发布了 intellij 项目设置的屏幕截图……那么您是通过 intellij 对 gradle 的支持,还是直接使用 gradle 来做到的?

标签: java gradle javafx


【解决方案1】:

我假设您是在命令行上构建而不是通过 IntelliJ。否则,我不知道出了什么问题。但即使您不是,您仍然应该配置 Java 兼容性,以使您的构建更加独立于本地环境。

默认情况下,Gradle 将使用与运行 Gradle 相同的 JDK 构建。您可以在命令行上验证 gradlew --version 的版本。一般可以通过环境变量JAVA_HOME来设置。

为了确保您的构建与 Java 11 兼容,无论您使用什么版本运行 Gradle,您都有一些选择。

首先,您可以指定一个工具链。如果您尚未使用 JDK,这将使 Gradle 自动下载兼容版本的 JDK。仅从 Gradle 6.7 起可用。

// Groovy DSL. Gradle 6.7+
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
    }
}

您还可以指定发布标志。这将指示当前的 JDK,即使您使用 Java 15 运行,也要使构建与早期版本兼容。仅从 Gradle 版本 6.6 起可用。

// Groovy DSL. Gradle 6.6+
compileJava {
    options.release = 11
}

最后,如果您使用的是旧版本的 Gradle,您可以指定源和目标的兼容性。这不如之前的选项好,因为它不能确保您只使用与 Java 11 兼容的 API - 只有字节码与 Java 11 兼容。

// Groovy DSL. Any version of Gradle (but not as safe)
compileJava {
    sourceCompatibility = 11
    targetCompatibility = 11
}

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 2016-02-05
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多