无法定位tools.jar文件

198

我正在使用Java构建一个项目。

我遇到了这个错误:

Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre6\lib\tools.jar

我已经安装了JDK,文件夹:C:\Program Files\Java\jre6\lib 已经在我的系统中,但是文件tools.jar没有出现。

我认为工具应该属于JDK而不是JRE。不是这样吗?C:\Program Files\Java\jdk1.6.0_24\lib - Edwin Dalorzo
5
顺便提一下,我觉得惊人的是这个程序实际上说出了它查找的位置。很少有程序提供这种有用的线索。 - Peter Flynn
还请参考重复的问题:https://dev59.com/oGox5IYBdhLWcg3wk1Eg 那里的答案比这里好一些。 - Arashsoft
在我的情况下,问题出在路径上。我试图使用位于名称中带有空格的文件夹中的脚本。我试图从二进制kafka文件夹中运行./bin/kafka-console-consumer.sh,但是当我被要求首先使用./gradlew jar -PscalaVersion=2.13.6构建项目时,这个构建命令实际上为我生成了错误。 - stopanko
36个回答

203

是的,您下载和安装了Java运行时环境(JRE)而不是Java开发工具包(JDK)。后者包含了tools.jar、java.exe、javac.exe等工具。


12
@olidev,我正在检查这个问题,但仍然不能停止指出这个问题!这怎么可能是你的答案?你已经提到你已经安装了jdk和jre。我实际上也遇到了类似的问题,而且它仍然存在 :-( 。需要知道你是如何解决它的? - Mercenary
8
请将JAVA_HOME和/bin目录添加到您的路径中。你知道这个答案已经两年了,对吗? - duffymo
18
在Ubuntu中:运行# apt-get install default-jdk,错误就会消失。 - Xavi Montero
2
关键是JDK。那里面有工具。JRE没有。 - duffymo
4
不一定。在我看来,他们可能将JAVA_HOME设置为jdk内部的jre而不是jdk本身。 - ArtOfWarfare
显示剩余4条评论

91

如果这对任何人仍然是一个问题,我对之前答案进行了一些澄清。我正在使用只安装了JDK的ant时遇到了同样的问题。尽管JDK安装程序给出了以下目录结构:

 Directory of C:\Program Files\Java

05/08/2012  09:43 AM    <DIR>          .
05/08/2012  09:43 AM    <DIR>          ..
05/08/2012  09:46 AM    <DIR>          jdk1.7.0_04
05/08/2012  09:19 AM    <DIR>          jre6
05/08/2012  09:44 AM    <DIR>          jre7
               0 File(s)              0 bytes

当我运行ant时,它抱怨找不到jre7子目录下的tools.jar。直到我执行set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_04"命令后,错误才消失。


8
(针对我们中安装了不同版本的JRE/JDK的人)这个。谢谢! - Daren Thomas
它对我起作用了。之前我也在路径中加入了 \bin,这就是问题所在。 - John
谢谢,我希望我能给你两个赞! - Luke

42
  1. 安装Java SDK

  2. 添加一个名为JAVA_HOME的系统环境变量,值为JDK的位置。
    前往控制面板 -> 系统和安全 -> 系统 -> 高级系统设置 -> 环境变量 -> 系统变量 -> 新建... 示例:
    变量名:JAVA_HOME
    变量值:C:\Program Files\Java\jdk1.7.0_21

  3. 关闭/重新打开CMD窗口,以使新变量在尝试重新运行ant命令之前生效。


4
JAVA_HOME 变量解决了所有问题,非常感谢 :) - krinn
5
PATH中需要包含/bin,而JAVA_HOME中不需要包含/binPATH是系统环境变量之一,它指定了系统在哪些目录下查找可执行文件。而JAVA_HOME是Java的安装目录,它通常被用于指定Java的根路径。 - Daniel W.
1
谢谢,我找了好几个小时才找到这个!! - kcho0
1
在Windows8.1上运行得非常好。 - Umar Abbas
工作得很好!谢谢。 - Heidi

31

我遇到了同样的问题,将 C:\Program Files\Java\jdk1.6.0_26\lib\tools.jar 复制到 C:\Program Files\Java\jre6\lib\ext 就解决了。


5
污染本地安装程序的类(这些类明显不属于该处)可能导致“在我的机器上可以工作”的综合征,即使已经有正式的构建过程。 tools.jar包含用于支持JDK中的工具和实用程序的非核心类 - real_paul
感谢这个解决方法!在我的情况下,我将 corretto-1.8.0_282\lib\tools.jar 复制到 corretto-1.8.0_282\jre\lib\ext\tools.jar,这解决了无法停止的 ClassNotFound 异常流。 - Roman Golyshev

23

如果您已经安装了JDK 9.0.1,由于tools.jar已被弃用,您也将遇到这个问题。请参阅迁移文档


1
这个回答比之前被赞的回答更加相关。 - deepak
2
添加关于如何迁移仍然需要tools.jar的Maven构建的信息将是很好的。 - Ryan Leach

10

将您的JAVA_HOME环境变量设置为指向C:\Program Files\Java\jdk1.7.0_02


10

如果您使用的是Linux操作系统,您可以通过在系统上安装Java来解决此问题:

sudo apt-get install openjdk-7-jdk openjdk-7-jre

显然,您可以使用“sudo apt-get install openjdk-8-jdk openjdk-8-jre”安装Java 8。 - schlenger

7
不,根据您的目录结构,您安装了JRE而不是JDK。两者有区别。
C:\Program Files\Java\jre6\lib
                      ^^^^

应该是这样的:

它应该类似于:

C:\Program Files\Java\jdk1.6.0_24

是的,你说得对!但我该如何卸载JRE?提前感谢。 - olidev
开始 > 控制面板 > 软件(或类似,取决于Win*版本) - Sean Patrick Floyd
但是没有这样的选项可以删除jre。我刚刚检查过了! - olidev
@Joesy 好的,如果你找不到它,就算了,没有必要卸载它(除非为了恢复磁盘空间)。你可以并行安装多个JDK和/或JRE。 - Sean Patrick Floyd

5
我在Linux机器上遇到了同样的问题。起初我感到非常沮丧,因为我已经安装了JDK和JRE。我同时使用版本1.6、1.7和1.8,并且我已经尝试使用替代方案来正确地设置所有内容。
问题解决起来很愚蠢,但又很不符合直觉。虽然我使用了正确的JDK,但我注意到Maven抱怨的工具jar路径 - 它希望它是:
$JAVA_HOME\..\lib\tools.jar
$JAVA_HOME变量直接指向我的jdk文件夹(/usr/local/java也是正确的$PATH条目和备用符号链接)。它实际上搜索位于java目录外部lib文件夹,因为:
$JAVA_HOME\..\lib\tools.jar

将解析为

/usr/local/lib/tools.jar

这不是一个有效的位置。

为了解决这个问题,$JAVA_HOME 变量应该指向这个位置 /usr/local/java/jre(假设 JDK 路径为 /usr/local/java)-- 实际上,在 JDK 安装目录下有一个 jre 文件夹,每个 JDK 都带有它。这个新设置将会让 Maven 查看 JDK 中的 JRE 目录:

$JAVA_HOME\..\lib\tools

现在解析为

/usr/local/java/jre/../lib/tools.jar

最后,转至
/usr/local/java/lib/tools.jar

这就是tools.jar实际存储的位置。

因此,即使您确实使用的是JDK而不是JRE,$JAVA_HOME也必须指向JRE。请记住,操作系统中的备选项仍应引用JDK。


1
我在Windows上遇到了同样的问题,使用你的方法解决了我的问题。 - Yigang Wu
我已经尝试了所有这些方法,但仍然遇到了tools.jar的问题。Randoop是否值得投入精力?也就是说,它生成的单元测试是否足够好?令人沮丧的是,我的Windows电脑上的其他每个Java程序都能正常运行。 - Mr Smith
@MrSmith,当您收到错误时,Randoop寻找的路径是什么?也许Randoop有自己的环境设置,告诉它JRE在哪里?此外,在更改环境变量后,您是否重新打开了shell窗口(如果从shell运行)? - Ivaylo Slavov

5
不要花太多时间寻找“tools.jar”。如果你遇到这样的错误,请不要沮丧。
如果你已经安装了Java JDK 1.5,那么请进入“lib”文件夹,你应该可以在那里找到“tools.jar”。将其复制并粘贴到你的ant“bin”文件夹中,然后尝试使用命令“ant -version”。
你应该可以看到预期的结果。

2
这种方法可行吗? - S_M

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