Gradle无法找到tools.jar

196

我正在使用gradle与javadoc doclets,因此我需要使用位于jdk的lib文件夹中的tools.jar包。

问题在于gradle不会自动引入它,所以我将该tools包添加到我的libs文件夹中,并将其添加到dependencies.gradle文件中。

现在我想直接从我的JDK主目录中获取它并引入到dependencies.gradle中。有什么方法可以实现吗? 我已经在我的dependencies.gradle文件中尝试了以下内容:

compile files("${System.properties['java.home']}/lib/tools.jar")

但是编译时它找不到它。


3
值得一提的是,在解决这个问题之前,就像我在遇到它时所做的那样,您需要确保已安装JDK。并且在某些系统上,您需要安装devel JDK软件包才能获取tools.jar工具。 - mrooney
31个回答

163

我在尝试通过 CLI 运行命令时遇到了这个问题。

系统在查找 JRE 文件夹(即 D:\Program Files\Java\jre8\bin)时出现了问题。如果我们在那里查看,就会发现没有 Tools.jar,因此出现了错误。

您需要找到 JDK 的安装目录,在我的情况下是 D:\Program Files\Java\jdk1.8.0_11,如果您在其中的 lib 目录中查看,就会看到 Tools.jar

我所做的是创建了一个新的环境变量 JAVA_HOMEenter image description here

然后您需要编辑 PATH 变量以包括 JAVA_HOME,即 %JAVA_HOME%/bin; enter image description here

重新打开命令提示符,应该就可以运行了。


22
tool.jar 在 %JAVA_HOME%\lib; 路径下,而不是 bin 文件夹中。 - Sam YC
5
这是否意味着我们应该将%JAVA_HOME%/bin%JAVA_HOME%/lib都添加到“Path”变量中? - Eric
3
尽管 tools.jar 确实在 \lib 中,但将只添加 \bin 到路径中的解决方案对我起了作用,但不要问为什么。 - PHPirate
1
通常需要重新启动/注销才能使更改生效。 - reiner_zuphall
4
我需要删除路径条目 C:\ProgramData\Oracle\Java\javapath,并将其替换为 C:\ProgramData\Oracle\Java\jdk1.8.xxx,因为它默认指向了姐妹JRE目录。 - John

81

找到了。系统属性'java.home'与JAVA_HOME环境变量不同。JAVA_HOME指的是JDK,而java.home指的是JRE。如需更多信息,请参阅该页面

所以,我的问题在于我的起始点是jre文件夹(C:\jdk1.6.0_26\jre),而不是jdk文件夹(C:\jdk1.6.0_26),就像我之前想的一样(tools.jar在C:\jdk1.6.0_26\lib文件夹中)。在dependencies.gradle中的编译行应该是:

compile files("${System.properties['java.home']}/../lib/tools.jar")

31
在Idea与Gradle中如何设置Java Home? - Chinaxing
1
有没有针对Mac用户的帮助? - Surya prakash chaturvedi

74

我在使用Eclipse执行Gradle任务时遇到了同样的错误。每次运行命令(例如war)时,进程都会抛出如下异常:

  

找不到tools.jar。请检查C:\ Program Files \ Java \ Jre8“是否为有效的JDK安装。

我尝试了这篇帖子中列出的解决方案,但没有一个解决了这个问题。以下是我的解决方案:

  1. 转到“Gradle Task”视图
  2. 右键单击要执行的任务
  3. 选择“打开Gradle运行配置”
  4. 在“Java Home”选项卡中选择您的本地JDK存储库,然后单击“确定”

再次运行,享受!


2
我经过数小时的搜索找到了这个答案,最终它起作用了。非常感谢! - Martin Häusler
5
我找不到Open Gradle Run和Java Home。你能进一步解释一下吗? - user5366495
作为新手,如何进入“Gradle任务”视图?我在“视图”菜单下没有看到任何Gradle选项,也没有任何类似的标签。 - Dronz

62

我刚刚添加了一个名为 gradle.properties 的文件,其内容如下:

org.gradle.java.home=C:\\Program Files\\Java\\jdk1.8.0_45

5
在Linux上,您还可以编辑~/.gradle/gradle.properties文件,在其中添加org.gradle.java.home=/usr/lib/jvm/java。在Fedora 24上对我有效。 - samsong8610

44

我曾经遇到过类似的问题,使用的是 Ubuntu 操作系统。该机器上只安装了 JRE。因此,我执行了以下命令来安装 JDK

sudo apt install openjdk-8-jdk


3
是的,安装JDK而不是JRE也解决了我的问题。 - peschü
1
即使我已经安装了Java并且看到了一个OpenJDK的文件夹,我还是遇到了相同的问题。后来我才意识到这个文件夹里只安装了JRE而不是JDK。 - Ajith M A
1
所以我已经安装了jdk,设置了我的JAVA_HOME - 我运行了这个确切的命令,并通过java -version(Debian)进行了验证。然后在看到这个评论之后,为了好玩,我重新运行了它,然后我的构建正常工作了。我不确定发生了什么事,可能是在初始安装时错过了一些软件包。谢谢! - orpheus

38

在macOS Big Sur中

该问题发生是因为环境变量JAVA_HOME在macOS Big Sur中未正确设置。

步骤1 - 通过在终端打印其值来确认您是否遇到了JAVA_HOME的问题。您很可能会得到一个空字符串。

echo $JAVA_HOME

步骤2 - 在您的计算机上找到正确的路径

/usr/libexec/java_home -V

复制与“Java SE 8”相关的路径,通常看起来像/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home

步骤3-使用nano编辑.zshenv

nano ~/.zshenv

第四步-按照以下方式将步骤2中的路径添加到文件中

export JAVA_HOME=YOUR_JAVA_PATH

例子:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home

第五步 - 调用更新后的.zshenv文件以激活环境变量

source ~/.zshenv

步骤 6 - 打印确认路径

echo $JAVA_HOME

这6个步骤可行!三天的努力没有白费 -> r3 Corda文档和各种教程都说要修改~/.zshrc,但在我的Mac上行不通。 - ehounder

27

我也曾经为此解决方案苦苦挣扎,但在这里描述的Gradle中找到了更好的方法

我们可以从 Gradle 中获取 JVM/JDK 信息。

dependencies {
   runtime files(org.gradle.internal.jvm.Jvm.current().toolsJar)
}

如此简单。


3
如果我使用compile而不是runtime,这对我很有效。 - Dori
我喜欢这个解决方案。它很好,而且便携。 - Adam Plumb
7
这个解决方案不适用于Gradle 4.x。我会收到一个“NullPointerException”。 - Thunderforge
1
当最新的JDK中没有可用的tools.jar时,我可以想象它返回null。请参见https://github.com/gradle/gradle/blob/master/subprojects/base-services/src/main/java/org/gradle/internal/jvm/Jvm.java#L297 - Mohammed

22
在CentOS7中,安装开发包会同时安装tools.jar工具。该文件在java-1.8.0-openjdk中不存在。
执行以下命令以安装java-1.8.0-openjdk-devel: sudo yum install java-1.8.0-openjdk-devel

谢谢Richard!这真的帮了我!我一直在努力运行"react-native run-android",但是遇到了错误:
  • 出了什么问题: 执行任务': app:compileDebugJavaWithJavac'失败。
    找不到tools.jar。请检查 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-5.b14.fc27.x86_64/jre 是否包含有效的JDK安装。现在它已经工作了!再次感谢!
- Matheus Gontijo
谢谢Richard,这对我也有用。基本上这是一个JAVA_HOME路径问题,它试图在所需的Java JDK路径中查找tools.jar。 - rajdeepbs29
我正在使用亚马逊 Linux AMI,这个解决方案完美地运行了。 - Freddie

19

将以下内容添加到gradle.properties文件中:

org.gradle.java.home=C:\Program Files\Java\jdk1.8.0_91


7
请不要忘记使用双反斜杠。例如:org.gradle.java.home=C:\\Program Files\\Java\\jdk1.8.0_144\ - CoolMind

13

我的Mac解决方案:

将以下行添加到gradle.properties文件中:

org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home

不是这一个:

org.gradle.java.home=/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

您可以打开最后一个主目录,发现不存在lib/tools.jar文件,请更改路径为JavaVirtualMachines/jdk1.8.0_271.jdk,对我有效。

顺便说一下,在终端中,我回显了$JAVA_HOME,它获取了第一个路径,而不是第二个路径,我认为这就是我的Gradle无法正常工作的原因。


2
谢谢!将$JAVA_HOME环境变量添加到我的.zshrc文件中并将其添加到gradle.properties文件中,这对我很有帮助:D - CodeSammich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接