Ant需要使用tools.jar文件,但找不到它。

48

我正在为一个Java程序搭建开发环境,第一次尝试使用Ant构建脚本后,出现了以下错误:

Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-6-openjdk/lib/tools.jar

虽然 JDK 的路径是正确的,但 tools.jar 确实不在那里。它实际上应该在那里吗,还是我在配置/安装方面出了什么问题?


看起来你只安装了JRE版Java。也许可以去http://openjdk.java.net/install/看看。请问您使用的是哪个操作系统? - martin clayton
操作系统是Ubuntu。起初我只安装了JRE,然后我安装了JDK。它们可能被配置错误 :) - Genadinik
可能是重复的问题:无法定位tools.jar - fcm
10个回答

66

看起来您可以在 /usr/lib/jvm/java-6-openjdk 中安装了Java,但只有JRE,没有JDK。这是我的解决方法:

sudo apt-get install openjdk-6-jdk


您还需要将JAVA_HOME重定向到JDK而不是JRE。 - Edward Falk
8
同样适用于Java 8:sudo apt-get install openjdk-8-jdk - Tim Kuipers
这不是Ubuntu的一个bug吗?ant包难道不应该依赖于JDK吗? - dreamlax

19
注意:在 CentOS / RHEL 上仅安装java-1.x.0-openjdk是不够的。还需安装java-1.x.0-openjdk-devel

2
谢谢。我想知道为什么Java开发工具包(JDK)需要额外的开发软件包…… - user1708042

14

这个问题似乎出现在我的机器上。我正在运行Windows XP SP3上的Sun JDK 1.6.0_21。

您确定您安装了JDK吗?可能你只安装了JRE?


我同时拥有jdk和jre。但是那个特定的目录被下载并提取为jdk,这让我认为它是jdk哈哈。 - Genadinik
1
更具体地说,将以下内容添加到.bashrc文件中:export JAVA_HOME=/usr/bin - gouravtiwari21
更具体地说,如果您正在运行调用Ant构建的构建脚本,则可能需要在~/.bashrc中实际设置export。我发现仅在运行特定的build.sh之前在终端中执行此操作并不能解决问题。我还设置了export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64而不仅仅是/usr/JAVA_HOME应该是JDK的安装目录,因为Ant将(我认为)查找JAVA_HOME/binJAVA_HOME/lib - orlade
7
这怎么能成为被接受的答案呢?严格来说,这甚至不算是一个答案。 - Heath Hunnicutt
我刚想到和 @HeathHunnicutt 一样的问题,似乎无论我去哪里寻找答案,都会遇到“你必须只安装了 JRE”这样的回答。我知道我有 /usr/lib/jvm/java-11-openjdk-amd64/,那是怎么回事? - Jamie Lindsey

5
在Debian上,使用apt-get install ant安装Ant之后,运行它时遇到了相同的错误:Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-6-openjdk-amd64/lib/tools.jar。事实上,在/usr/lib中没有任何关于tools.jar的提及,尽管/usr/lib/jvm/java-6-openjdk-amd64本身是存在的。

https://packages.debian.org/search?searchon=contents&keywords=java-6-openjdk-amd64%2Flib%2Ftools.jar

根据上面的搜索,java-6-openjdk-amd64/lib/tools.jar似乎是openjdk-6-jdk的一部分,而ant没有安装它(因为它只被标记为建议安装(https://packages.debian.org/wheezy/ant))。
请运行 apt-get install openjdk-6-jdk

5
apt install defalut-jdk # this doesn't contain some file, like tools.jar...
apt install openjdk-8-jdk # this contains all files.

3
即使你的回答非常有用,我相信通过添加一些解释可以进一步改进它。点击链接了解更多关于如何撰写好的答案的内容。 - Yuriy Tsarkov

4

在Ubuntu上,我只需要安装JDK即可。

sudo apt-get install openjdk-7-jdk

...并且你可以随时搜索所有可用版本。

$ sudo apt-cache search openjdk | grep ^openjdk

从网站https://openjdk.java.net/install/我们可以了解到:

openjdk-7-jre 包仅包含 Java 运行环境。如果您想要开发 Java 程序,请安装 openjdk-7-jdk 包。


Android尚未移植到Java 7 :/ - Santosh Kumar
1
谢谢@sobi3ch,这解决了我的问题。不知道谁给你点了踩,但我为你在Ubuntu 14.04 LTS上的正确答案点了赞。 - Erik

3

尝试以下操作:

% sudo apt-get install sun-java6-jdk

% sudo update-alternatives --config java

选择路径为

/usr/lib/jvm/java-6-sun/jre/bin/java

的选项。在我的ubuntu 10.4上运行正常。

你也可以设置JAVA_HOME,方法如下:

% sudo export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")


2
在Ubuntu上,我通过安装包来解决了这个问题。
openjdk-7-jre-lib

随后出现了tools.jar。

(我知道这是一篇旧贴子,但我希望评论能对像我今天正在寻找答案的某人有所帮助。)


2

从oracle.com网站下载jdk-6u45-linux-x64.bin文件并通过解压安装,不会生成tools.jar文件。我猜这个文件是由“make-jpkg”脚本创建的。一旦我执行了该脚本并安装了生成的.deb文件,一切都正常了。

我真的很讨厌甲骨文公司的律师。


2
即使您已经安装了jdk,您仍需要重定向JAVA_HOME指向它。
以下是一种奇怪的技巧,您可以将其放入.profile中以正确设置JAVA HOME,无论您有哪个Java版本:
export JAVA_HOME=$(dirname $(dirname $(readlink -e /usr/bin/java)))
# Test for jdk installed above jre
if [ -x $JAVA_HOME/../bin/java ]; then export JAVA_HOME=$(dirname $JAVA_HOME); fi

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