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

Gradle运行时找不到Java”。/gradlew shadowJar

郭阳泽
2023-03-14

我正在尝试构建一个jar文件,其中包含JDBCMySQL驱动程序。到目前为止,我有一个非常基本的构建。gradle文件,它使用shadowJarplugin帮助构建这个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.

当试图用$找到爪哇时,我得到的爪哇

/usr/bin/java

使用$ls-la/usr/bin|grep-i javaji接收

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

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

另外,当我使用< code>$ readlink -f $(哪个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

知道为什么运行< code>$吗?/gradlew shadowJar将无法找到Java?

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

共有1个答案

夏侯林
2023-03-14

我不会在注释中隐藏解决方案,而是创建一个答案。这稍微有点偏离主题,因为它不仅与如何在Linux / POSIX系统上设置JAVA_HOME有关,而且还与Gradle包装器的行为如何与给定的Gradle可执行文件不同有关。

以这种方式,它与这个Q有关,但并不完全相同

简而言之:

  • 如果设置了Gradle Wrappergradlew,则会使用JAVA_HOME>,否则将尝试只运行 而不运行任何 JAVA_HOME。它将记录到控制台上,说明这一点,并且它实际上无法继续
  • JAVA_HOME始终应设置为解析为目录而不是文件的路径

在这种情况下,JAVA_HOME被设置为实际的JDKJava可执行文件,并且对于Linux的替代方案(多个软件包和软件包版本如何满足系统需求)以及这些方案如何与JAVA_HOME一起工作存在一些混淆(大部分混淆是我误解了这个问题!)

这意味着 Gradle 包装器(在本例中)试图调用 /usr/lib/jvm/jdk-11.0.1/bin/java/bin/java(注意“bin/java”的双重引用)作为JAVA_CMD当然不存在。

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

AFAIK,替代系统没有任何便利来提供对底层JDK位置的类似JAVA_HOME的引用。我想可以通过编写alternatives命令的输出脚本来获取当前安装的和活动的JDK位置。

 类似资料:
  • 我正在尝试构建一个文件,该文件包含的。到目前为止,我有一个非常基本的文件,它正在使用插件来帮助构建这个文件。 问题是,当运行与Gradle相关的任何内容时,我会收到以下错误: 尝试使用定位Java时,我得到了 并且使用接收 到目前为止,这些信息都对我没有帮助,但我把它留在这里以防万一。 此外,当我使用时,我会收到: 在我看来这是Gradle想要寻找的合适路径。 最后,在我的中,我将其放入文件中以设

  • 我正在使用gradle来构建和测试我的应用程序。我使用命令 但是当从eclipse中运行时,测试工作完美,当使用gradle运行时失败。我的测试定义如下,它找不到的属性文件在这两个文件夹中: /home/user/Development/git/myproject/src/main/java/com/mycompany/config/home/user/Development/git/myproj

  • 当我从命令行运行我的使用Flyway的Spring Boot·科特林应用程序时,它似乎可以工作,但从IntelliJ运行时却失败了。我创建了一个复制这个问题的最小样本项目:https://github.com/pupeno/notflying 我从IntelliJ得到的错误是没有找到迁移: 据我所知,迁移就在那里,并且命名正确: 运行它的IntelliJ配置如下所示: 我补充说: to 和尝试从

  • 我刚刚下载了Eclipse并尝试运行它,它给了我这个错误消息: 错误:打开注册表项'Software\JavaSoft\Java运行时环境 到我得到: java版本“1.8.0_231” Java(TM)SE运行时环境(构建1.8.0_231-B11) Java HotSpot(TM)64位服务器VM(构建13.0.1+9,混合模式,共享) 我使用的是Windows 10 Pro EclipseI

  • 问题内容: 我在本地计算机上使用创建了一个新的Rails项目,但是当我尝试启动服务器时,我得到了:找不到JavaScript运行时。请参阅以获取可用运行时列表。() 注意:这与Heroku无关。 问题答案: 安装诸如nodejs之类的javascript运行时库可以解决此问题 要在ubuntu上安装nodejs,可以在终端中键入以下命令: 要在使用yum的系统上安装nodejs,请在终端中键入以下

  • 问题内容: 通常,我可以使用 npm 安装库,但是今天在安装yeoman时遇到了此错误。请帮助找出根本原因。 我查看了文件夹: C:\ Program Files \ nodejs \ node_modules \ npm \ bin \ 但看不到 node_modules 文件夹作为描述的错误。 我也尝试找到 npm-cli.js 并查看它实际上在 问题答案: 事实证明,问题出在系统变量中节点的