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

运行“./gradlew shadowjar”时,Gradle找不到Java

淳于飞鸾
2023-03-14

我正在尝试构建一个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有什么想法吗?

根据这个问题(似乎与我的问题类似),我的Gradle版本试图设置自己的java_home路径,我发现它被设置为/usr/bin/java/bin/java,而这个路径并不存在。

共有1个答案

卢黎昕
2023-03-14

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

在这种方式下,它与这个问答有关,但不完全相同,因为它有很多很好的提示。

简而言之:

    null

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

一旦我们将java_home设置到预期的JDK位置,Gradle包装器就成功运行了。

Afik,Alternative系统在提供java_homelike引用基础JDK位置方面没有任何便利。我想可以编写alternative命令的输出脚本,以获取当前安装的和活动的JDK位置。

 类似资料:
  • 我正在尝试构建一个文件,其中包含MySQL驱动程序。到目前为止,我有一个非常基本的文件,它使用plugin帮助构建这个文件。 问题是,在运行任何与 Gradle 相关的内容时,我会收到此错误: 当试图用$找到爪哇时,我得到 使用i接收 到目前为止,这些信息对我都没有帮助,但我把它留在这里以防万一。 另外,当我使用< code>$ readlink -f $(哪个java)时,我收到: 在我看来,这

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

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

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

  • 问题内容: 我正在尝试使用Mongoid / DeviseRails3.1模板(Mongoid_和Devise),并且不断收到错误消息,指出ExecJS无法找到JavaScript运行时。当我没有安装任何东西时,这还算公平,但是我尝试安装Node.js,Mustang和RubyRacer,但是没有任何效果。 我找不到JavaScript运行时。有关可用运行时的列表,请参见sstephenson /

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