Ant构建:无法找到tools.jar。预计在C:\ Program Files \ Java \ jre7 \ lib \ tools.jar中找到它。

27

我知道这个问题很普遍,但是没有一个解决方案能帮助我。

我使用了这个这个这个这个解决方案,但都没能帮助我。

我想要实现uiautomator测试并且需要使用ant编译我的build.xml文件,但是出现了奇怪的错误。

我使用的操作系统是Windows 8.1

我的JAVA_HOME系统变量设置为c:\programs files\java\jdk1.7.0_51和c:\programs files(x86)\java\jdk1.7.0_51

我的PATH系统变量也设置为%JAVA_HOME%/bin,我的%ANT_HOME%设置为c:\apache-ant。

但是当我在android应用程序目录中执行ant build命令时,出现了以下错误:

unable to locate tools.jar. Expected find it in C:\Program Files\Java\jre7\lib\tools.jar
BUILD FAILED
Perhaps JAVA_HOME does not point to the JDK

但是我的JAVA_HOME指向了正确的JDK!我对此感到困惑。我也多次重建了我的构建,但结果都一样。

如果有人能帮助我,我会非常感激。


你是否在系统环境变量中设置了这些变量的PATH变量? - Smriti
同时将 %JAVA_HOME%\bin 添加到 PATH 系统变量中。 - Mandeep Pasbola
10个回答

40

我也遇到过这个问题,并通过设置变量来解决:

[1] ANT_HOME - C:\apache-ant-1.9.3

[2] JAVA_HOME - C:\Program Files\Java\jdk1.7.0_21

[3] PATH - D:\Android_Development\android_sdk\platform-tools\;%ANT_HOME%\bin;%JAVA_HOME%\bin;D:\Android_Development\android_sdk\tools

注意:将所有这些设置在系统变量中而不是用户变量中。

这解决了我的问题。

希望能对你有所帮助。


4
我在用户变量中设置了ANT_HOME和JAVA_HOME。在你的回答之后,一切都运行得非常顺利。感谢你告诉我正确的变量名称,点赞👍。 - prateek
我已经像其他问答中一样定义了JAVA_HOME和ANT_HOME,但只有这个起作用。 - Ruwantha
太棒了。我的JAVA_HOME是C:\Program Files\Java\jdk1.8.0_73\bin,所以我移除了bin,现在它可以正常工作了。 - David Jiboye
有同样的问题,但是你的答案帮助我解决了。不过它对于用户变量起作用。 - motaa
我遇到了同样的问题。我确信我正确设置了JAVA_HOME,但它是在用户变量下设置的,当我将相同的属性放在系统变量下时,它完美地工作了。 - Wael

18
为了解决这个问题,您只需要将工具包tools.jar从"C:\Program Files\Java\jdk1.7.0\lib" 直接复制到 "C:\Program Files\Java\jre7\lib\"。这样,您就可以成功解决问题。
它有效!…

它对我解决了问题 - 但是我使用了“创建快捷方式”选项。我来自Linux世界,所以我喜欢链接文件 :) - antivirtel

11

我解决了设置“%JAVA_HOME%”到PATH开头的问题。当我将其准确地设置为开头时,它对我起作用。


2
关于 tools.jar,我有以下经验:当下载 ant 时,它附带了开放式 Java 7。然而,我下载的系统使用的是 Java 8 u 40 (Oracle 版本)。因此,当我通过 Linux 中的软链接将 lib/jre 指向 tools.jar 的位置时,我收到了错误提示,说现在版本/子版本不匹配。这是因为 ant 使用的是版本 7,而来自 Oracle 的 tools.jar 现在是版本 8。
解决方案是使用上述帮助(将 JAVA_PATH 设置为我的 Java 版本 8u40 的 Oracle),这样编译器和 tools.jar 文件就是相同版本。
因此,我所处的情景是:jdk 下载到了我 /home/david/Desktop/Android5.0/jdk1.8.0u40 目录中,Android 包下载到了 /home/david/Desktop/Android5.0 目录中,我的 Eclipse 工作区在 /home/david/workspace 中,现在我希望一切顺利。
ant 文件 build.xml 放置在我的 /home/david/workspace 目录中,并且看起来像这样:
<project>
    <target name="clean">
        <delete dir="build"/>
    </target>

    <target name="compile">
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes"/>
    </target>

    <target name="jar" depends="compile">
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/HelloWorld.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="oata.HelloWorld"/>
            </manifest>
        </jar>
    </target>

    <target name="run" depends="jar">
        <java jar="build/jar/HelloWorld.jar" fork="true"/>
    </target>

</project>

这个问题中的java文件 - HelloWorld.java,被放置在目录/home/david/workspace/build/src/oata中,并且现在它已经编译到了你可以看到的目的地,然后从那里构建jar文件。
确实,有一些方法可以让一个Java版本假装成另一个版本 - 但我不想这样做,因为我正在设置一个构建环境,在那里我可以从仓库中提取、构建和存储构建代码到下载站点。
上面的build.xml示例略有修改,来自以下Ant构建教程:https://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html 希望对你们也有用,因为ant确实是构建的最佳方式之一,你可以从命令行调用它,你可以让它首先从仓库中选择文件(如GitHub或BitBucket等),然后你可以将编译结果FTP到开发人员喜欢的下载站点,你可以将代码压缩在一起,以便在最坏的情况下你已经准备好并压缩了版本...

2
  1. 系统变量中设置:

    • JAVA_HOME: C:\Program Files\Java\jdk版本号
    • ANT_HOME: C:\Program Files\apache-ant-版本号
    • PATH: %JAVA_HOME%\bin;%ANT_HOME%\bin;... (将其放置在PATH变量的开头)
  2. 用户变量中删除与Java/Ant相关的所有内容。

  3. 重新启动命令行(!)以接收正在运行的实例上下文中的新变量。


2

将tools.jar从C:\Program Files\Java\jdk1.8.0_91\lib复制并粘贴到C:\Program Files\Java\jdk1.8.0_91\bin。在我的情况下,这个方法很有效。


0

按照以下步骤解决问题:

前往控制面板 -> 设置以下环境变量:

  1. ANT_HOME - C:\apache-ant-1.9.14

  2. JAVA_HOME - C:\Program Files\Java\jdk1.8.0_181

  3. PATH - %ANT_HOME%\bin;%JAVA_HOME%\bin;


0

这是因为编辑环境变量而不是创建新的变量。虽然设置了Java Home和Path变量,但它们没有正确指向。 只需删除Java Home和Path变量,然后再添加即可。 这个方法解决了我的问题。


亲爱的Sudha,非常感谢您的贡献。正如您所看到的,这个问题已经很老了!您的答案非常好,为解决问题开辟了一条新途径。请尝试在新问题中提供更新的解决方案,这样您将更多地帮助社区。 - MuhanadY

0

检查 JAVA_HOMEPATH 变量的值,有时候您可能会放错位置。

JAVA_HOME="C:\Program Files\Java\jdk1.8.0\bin" .

而不是

JAVA_HOME="C:\Program Files\Java\jdk1.8.0" .

并且 PATH=%JAVA_HOME%\bin;%PATH% .

只需在命令行界面中回显出 PATH 变量即可。

echo %PATH%.

0
请设置JDK而不是JRE的系统变量,这将解决问题。

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