gpt4 book ai didi

java - Gradle运行时找不到Java "./gradlew shadowJar"

转载 作者:行者123 更新时间:2023-12-02 01:46:25 25 4
gpt4 key购买 nike

我正在尝试构建一个 jar 文件,其中包含用于 JDBCMySQL 驱动程序。到目前为止,我有一个非常基本的 build.gradle 文件,它使用 shadowJar 插件来帮助构建这个 jar 文件。

问题是,当运行任何与 Gradle 相关的内容时,我收到此错误:

ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/jdk-11.0.1/bin/java

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

当尝试使用 $ which java 定位 Java 时,我得到了

/usr/bin/java

并使用$ ls -la/usr/bin | grep -i javaj 我收到

lrwxrwxrwx  1 root     root          22 Sep 21 11:32 java -> /etc/alternatives/java
lrwxrwxrwx 1 root root 29 Nov 5 21:12 java2groovy -> /etc/alternatives/java2groovy
lrwxrwxrwx 1 root root 23 Nov 5 20:33 javac -> /etc/alternatives/javac
lrwxrwxrwx 1 root root 25 Nov 5 20:33 javadoc -> /etc/alternatives/javadoc
lrwxrwxrwx 1 root root 23 Nov 5 20:33 javah -> /etc/alternatives/javah
lrwxrwxrwx 1 root root 23 Nov 5 20:33 javap -> /etc/alternatives/javap

到目前为止,这些信息对我都没有帮助,但我将其留在这里以防万一。

另外,当我使用 $ readlink -f $(which java) 我收到:

/usr/lib/jvm/jdk-11.0.1/bin/java

在我看来,这似乎是 Gradle 试图寻找的合适路径。

最后,在我的 .bashrc 中,我已将其放入文件中以设置我的 JAVA_HOME:

## JAVA ##
export JAVA_HOME="/usr/lib/jvm/jdk-11.0.1/bin/java"
export PATH=$PATH:/usr/lib/jvm/jdk-11.0.1/bin

关于为什么运行 $ ./gradlew ShadowJar 无法找到 Java 有什么想法吗?

编辑

根据this question这似乎与我的问题类似,我的 Gradle 版本正在尝试设置自己的 JAVA_HOME 路径,我发现它被设置为 /usr/bin/java/bin/java 不存在。

第 70 - 89 行有一个 if/else 语句执行此操作 enter image description here

最佳答案

我不会在评论中隐藏解决方案,而是创建一个答案。这与主题无关,因为它不仅与在 Linux/POSIX 系统上设置 JAVA_HOME 的方式有关,还与 Gradle Wrapper 与给定 Gradle 可执行文件的行为方式不同有关。

以这种方式,它与 this Q&A which has a lot of nice hints 相关,但不完全相同。就在其中。

简而言之:

  • Gradle Wrapper gradlew 如果设置则使用 JAVA_HOME,否则将尝试仅运行 java 而无需任何 JAVA_HOME 。它会将此信息记录到控制台,并且它无法真正继续。
  • JAVA_HOME 始终应设置为解析为目录的路径,而不是文件 .

在这种情况下,JAVA_HOME 被设置为实际的 JDK Java 可执行文件,并且对于 Linux“替代方案”(多个包和包版本如何满足系统要求)以及这些包如何满足系统要求存在一些困惑。使用JAVA_HOME。 (大部分困惑是我误解了这个问题!)

这意味着 Gradle Wrapper(在本例中)尝试调用 /usr/lib/jvm/jdk-11.0.1/bin/java/bin/java (注意双引用到“bin/java”)作为 JAVA_CMD 当然,它不存在。

一旦我们将 JAVA_HOME 设置为预期的 JDK 位置,Gradle Wrapper 就会成功运行。

据我所知,替代系统没有任何便利性来提供对底层 JDK 位置的类似 JAVA_HOME 的引用。我想人们可以编写 alternatives 命令的输出来获取当前安装且 Activity 的 JDK 位置。

关于java - Gradle运行时找不到Java "./gradlew shadowJar",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com