Gradle 没有找到 tools.jar

Posted

技术标签:

【中文标题】Gradle 没有找到 tools.jar【英文标题】:Gradle does not find tools.jar 【发布时间】:2012-07-05 21:48:12 【问题描述】:

我正在使用带有 gradle 的 javadoc doclet,所以我需要使用包 tools.jar,它位于 jdk 的 lib 文件夹中(在我的例子中是 1.6.0_26)。

关键是 gradle 不会自动获取它,所以我将该工具包添加到我的 libs 文件夹,然后将其添加到 dependencies.gradle 。

现在我想将它直接从我的 JDK 主页中导入到我的 dependencies.gradle 中。有没有办法做到这一点?我在 dependencies.gradle 中尝试了下一个:

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

但是编译的时候没有找到。

【问题讨论】:

值得一提的是,作为解决这个问题的先行者,当我遇到这个问题时,你需要确保你确实安装了 JDK :P 并且,在某些系统上,你需要安装devel JDK包来获取tools.jar 【参考方案1】:

对于 Windows,将 Gradle 属性文件的 JDK 主路径添加为 org.gradle.java.home。 如果您没有 gradle.properties 文件,则创建一个新文件并添加

例如:org.gradle.java.home=C:\Program Files\Java\jdk1.8.0_241

【讨论】:

【参考方案2】:

在 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

第 4 步 - 将第 2 步中的路径添加到文件中,如下所示

export JAVA_HOME=YOUR_JAVA_PATH

示例:

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

第 5 步 - 获取更新后的 .zshenv 文件以激活环境变量

source ~/.zshenv

第 6 步 - 打印以确认路径

echo $JAVA_HOME

【讨论】:

【参考方案3】:

我的 Android Studio 版本:4.2.1

"tools.jar" 由 Oracle JDK 提供,这是 android studio 编译所需的 - 在我的 PC 上将 android studio 更新到最新版本后,我遇到了这个问题。

要解决此问题,请按照以下步骤操作:

    在 Android studio 文件 -> 项目结构 -> SDKs(在平台设置下)

    A) 如果假设中间窗格中不存在 JDK/JDK 主路径,则通过在中间窗格中按“+”符号添加 JDK 路径(中间窗格还包含已下载的 Android SDK)

    B) Java sdk 通常存在/安装在 64 位路径 => "C:\Program Files\Java\jdk1.X.Y_ABC"(在我的 PC 中是 1.8.0_202)或 32 位 => "C:\Program Files (x86)\Java\jdk1.X.Y_ABC"

    如果假设您的 PC 中没有安装 JDK, 请从 Oracle Java 网站下载并安装 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

    在系统环境变量中设置JDK和JRE路径(从步骤2中提到的网页下载)

    A) 按 windows 键输入“编辑系统环境变量”并打开应用程序

    B) 转到高级 -> 环境变量 在系统变量下添加 JAVA_HOME 和 JRE_HOME 如下

Set Windows system environment variable

    在用户变量下的 Path 环境变量中添加 jdk lib 路径(只有在前面的步骤没有解决错误时才需要此步骤) C:\Program Files\Java\jdk1.X.Y_ABC\lib

【讨论】:

【参考方案4】:

找不到 tools.jar

MacOS

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile

然后重启 Shell

【讨论】:

【参考方案5】:

对我来说,在尝试使用音频播放器颤振库后出现此错误。 为了解决我得到了文件夹的 tools.jar:

C:\Program Files\Android\Android Studio\jre\lib

粘贴在上面

C:\Program Files\Java\jre1.8.0_181\lib.

在此之后构建工作正常。

【讨论】:

【参考方案6】:

我在 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 无法正常工作的原因。

【讨论】:

谢谢!将 $JAVA_HOME 环境添加到我的 .zshrc 并将其添加到 gradle.properties 为我做了:D【参考方案7】:

为我解决了以下问题:

    在 C:\Program Files\Android\Android Studio\jre\lib 中找到 tools.jar 复制粘贴到 C:\Program Files (x86)\Java\jre1.8.0_271\lib 再次运行代码,它运行正常。

【讨论】:

您好!感谢您的回答:) 我确信这有效....但是,请检查此问题中的其他答案。它将帮助您将来了解 Java 运行时环境 (JRE) 和 Java 开发工具包 (JDK) 之间的区别。【参考方案8】:

将以下代码行放入 gradle.properties 文件中:

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

Example image

【讨论】:

【参考方案9】:

我通过这种方式解决了问题:

在http://www.java2s.com/Code/Jar/t/Downloadtools180jar.htm上下载文件tools-1.8.0.jar 解压文件并重命名为 tools.jar 复制到 C:\Program Files\Java\jre1.8.0_191\lib 文件夹 重试

【讨论】:

不得不复制到C:\Program Files (x86)\Java\jre1.8.0_211C:\Program Files (x86)\Java\jre1.8.0_251【参考方案10】:

我已经尝试了大多数***选项,但我的环境设置似乎有问题,所以它们没有帮助。为我解决问题的是重新安装 jdk1.8.0_201jre1.8.0_201,这为我解决了错误。希望对某人有所帮助。

【讨论】:

【参考方案11】:

在 Centos 7 中,我发现只有 JDK 有 tools.jar,而 JRE 没有。我已经安装了 Java 8 JRE(yum install java-1.8.0-openjdk),但没有安装 JDK(yum install java-1.8.0-openjdk-devel)。

安装后者可以解决问题。另外,记得设置JAVA_HOME

【讨论】:

【参考方案12】:

如果您使用终端构建并且遇到此错误,您可以在 gradle.properties 文件中指向与 android studio 捆绑的 jdk:

org.gradle.java.home=/usr/local/android-studio/jre

【讨论】:

【参考方案13】:

在我的系统(Win 10、JRE 1.8.0、Android Studio 3.1.2、Gradle 4.1)上,JRE 目录 (C:\Program Files\Java\jre1.8.0_171) 中没有 tools.jar

但是,我在C:\Program Files\Android\Android Studio\jre\lib 找到它并尝试设置JAVA_HOME=C:\Program Files\Android\Android Studio\jre

这对我有用!

【讨论】:

同样的问题,为我修复了,Win 10/Android Studio 也是如此。此外,上述解决方案实际上似乎都没有下载“Tools.jar”......只是jre没有附带) 也为我工作。我在包含org.gradle.java.home=E:\\Android Studio\\jre 的项目根目录中创建了一个 gradle.properties【参考方案14】:

在 CentOS7 中,开发包会安装 tools.jar。该文件在 java-1.8.0-openjdk 中不存在

sudo yum install java-1.8.0-openjdk-devel

【讨论】:

谢谢理查德!它真的帮助了我!我正在努力运行“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 安装。现在它正在工作!再次感谢! 谢谢理查德..它也对我有用。基本上这是一个 JAVA_HOME 路径问题,它试图在所需的 java jdk 路径中找到 tools.jar。 我正在使用 Amazon Linux AMI,这个解决方案运行良好。【参考方案15】:

在 Windows 10 上,我遇到了同样的问题,这就是我解决问题的方法;

    访问Advance System Settings>Environment Variables>System Variables 选择PATH覆盖默认 C:\ProgramData\Oracle\Java\javapath 使用您自己的 jdk 安装,即 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_162

【讨论】:

这应该是 Windows 的公认答案 :) --thanks【参考方案16】:

我有一个使用 Ubuntu 的类似案例。该机器只安装了 JRE。所以,我只是执行了下面的命令来安装 JDK

sudo apt install openjdk-8-jdk

【讨论】:

是的,安装 JDK 而不是 JRE 也解决了我的问题。 即使我安装了 java 并且我看到了 openjdk 的文件夹,我也遇到了同样的问题。后来我才意识到该文件夹​​只安装了 JRE。不是 JDK。【参考方案17】:

这对我有用:

我收到消息

任务“:app:compileDebugJavaWithJavac”执行失败。

找不到 tools.jar。请检查 C:\Program Files\Java\jre1.8.0_121 是否包含有效的 JDK 安装。

在 Android Studio 中,检查您的 SDK 位置。 文件、项目结构、SDK 位置、JDK 位置。 示例:C:\android-studio\android-studio\jre 将 C:\android-studio\android-studio\jre\lib 文件夹中的 tools.jar 文件复制到 C:\Program Files\Java\jre1.8.0_121\lib 文件夹中。 重试。

【讨论】:

【参考方案18】:

在“Open Gradle Run Configuration”中通过JAVA_HOME选项卡添加JDK路径即可解决问题。

【讨论】:

【参考方案19】:

将此添加到gradle.properties

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

【讨论】:

不要忘记使用双反斜杠。例如:org.gradle.java.home=C:\\Program Files\\Java\\jdk1.8.0_144\ .【参考方案20】:

Linux

nanogedit 等任何文本编辑器中打开 /etc/environment 并添加以下行:

JAVA_HOME="/usr/lib/jvm/open-jdk"

Windows

    启动系统控制面板小程序(开始 - 设置 - 控制 面板 - 系统)。 选择高级选项卡。 单击环境 变量按钮。

    在系统变量下,点击添加按钮,然后通过以下几行:

    在变量名中:JAVA_HOME

    在变量值中:C:\Program Files\Java\jdk1.x.x_xxx

    x.x_xxxjdk 版本,你可以从这里得到你的 jdk 版本C:\Program Files\Java

    在系统变量下,选择路径,然后单击编辑,然后单击新建按钮,然后通过以下行:

    %JAVA_HOME%/bin;

【讨论】:

路径可能略有不同。在 Fedora 中,这对我有用 JAVA_HOME="/usr/lib/jvm/java-openjdk"【参考方案21】:

在我的情况下(Windows 10)在 Java 更新后我丢失了我的环境变量,所以我修复了再次添加变量,基于以下步骤https://confluence.atlassian.com/doc/setting-the-java_home-variable-in-windows-8895.html

【讨论】:

【参考方案22】:

像其他答案一样,我在 gradle.properties 文件中设置了 org.gradle.java.home 属性。但是带有 \ 分隔符的路径不起作用(在 Windows 10 上构建):

通过“org.gradle.java.home”提供的 Java 主目录无效。无效的 目录:C:Program FilesJavajdk1.8.0_65

所以不是

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

我不得不使用

org.gradle.java.home=C:/Program Files/Java/jdk1.8.0_65

那么构建成功

问题是该项目是使用 JRE 而不是 JDK 构建的,因为我是从 eclipse 构建它,所以这也有效:

在 Window>Preferences>Gradle>Arguments 中指定 Workspace JRE 并指定您的 JDK。 在 Window>Preferences>Java>InstalledJREs 中将您的 JDK 指定为默认值

【讨论】:

【参考方案23】:

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

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

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

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

再次奔跑,尽情享受吧!

【讨论】:

经过数小时的搜索,我找到了这个答案,这终于奏效了。非常感谢! 我找不到 Open Gradle Run 和 Java Home。你能进一步解释一下吗? 对此不熟悉,如何“转到“Gradle 任务”视图”?我在 View 菜单下没有看到任何 Gradle,也没有看到任何类似的标签?【参考方案24】:

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

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

【讨论】:

在linux上也可以编辑~/.gradle/gradle.properties文件,添加org.gradle.java.home=/usr/lib/jvm/java。在 Fedora 24 上为我工作。【参考方案25】:

我也在为这个解决方案而苦苦挣扎。如here 所述,使用 Gradle 找到了更好的方法。 我们可以从 Gradle 本身获取 JVM/JDK 信息。

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

如此简单。

【讨论】:

如果我使用compile 而不是runtime,这对我有用 我喜欢这个解决方案。它既美观又便携。 此解决方案不适用于 Gradle 4.x。我收到了NullPointerException 当最新的 JDK 没有可用的 tools.jar 时,我可以想象它会返回 null。见github.com/gradle/gradle/blob/master/subprojects/base-services/…【参考方案26】:

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

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

你需要找到JDK在哪里,在我的例子中是:D:\Program Files\Java\jdk1.8.0_11,如果你查看lib目录,你会看到Tools.jar

我做了什么我创建了一个新的环境变量JAVA_HOME

然后您需要编辑 PATH 变量以包含 JAVA_HOME,即%JAVA_HOME%/bin;

重新打开命令提示符并应该运行。

【讨论】:

tool.jar 在%JAVA_HOME%\lib; 而不是bin 文件夹中。 这是否意味着我们应该将%JAVA_HOME%/bin%JAVA_HOME%/lib 添加到Path 变量中? 尽管 tools.jar 确实在 \lib 中,但在解决方案中只将 \bin 添加到路径对我有用,但不要问为什么。 通常需要重启/注销才能使更改生效。 我不得不删除 PATH 条目 C:\ProgramData\Oracle\Java\javapath 并将其替换为 C:\ProgramData\Oracle\Java\jdk1.8.xxx 它默认为姐妹 JRE目录【参考方案27】:

可能晚了两年,但我最近遇到了同样的问题,这是我找到this post后最终得到的解决方案:

import javax.tools.ToolProvider

dependencies 
  compile (
    files(((URLClassLoader) ToolProvider.getSystemToolClassLoader()).getURLs()),
    ...
  

如果 java.home 指向一个不在 JDK 目录下的目录,甚至在 Mac OS 上你应该有 classes.jar 而不是 tools.jar,它应该可以工作。

【讨论】:

无法在空对象上调用 getURLs() 方法【参考方案28】:

找到了。 系统属性“java.home”不是 JAVA_HOME 环境变量。 JAVA_HOME 指向 JDK,而 java.home 指向 JRE。请参阅that page 了解更多信息。

Soo... 我的问题是我的起点是 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")

【讨论】:

那么,如何用gradle在idea中设置java.home? 对 mac 用户有什么帮助吗?【参考方案29】:

您是否确保 tools.jar 在编译类路径中出现?可能路径不正确。

task debug << 
    configurations.compile.each  println it 

【讨论】:

是的,它确实进入了类路径,但仍然遇到问题。

以上是关于Gradle 没有找到 tools.jar的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 没有找到我使用 Kotlin 和 JUnit 5 进行的测试

Gradle 找不到集成测试、JUnit 5 和 Spring Boot:没有找到给定的测试包括:

Gradle 在哪里找到“proguard-android-optimize.txt”?

Gradle的使用——快速找到自己想要在gradle中使用的jar包

使用 spotbugs 的简单 gradle 文件并找到安全漏洞?

无法为参数org.gradle.api.Project找到方法android()