Gradle找不到tools.jar


160

我将Javadoc doclet与gradle一起使用,因此需要使用package.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")

但是它在编译时找不到。


2
值得一提的是,作为解决此问题的先兆,当我遇到此问题时,我需要确保您实际上已经安装了JDK:P而且,在某些系统上,您将需要安装devel JDK软件包才能获得tools.jar
mrooney

Answers:


140

当我尝试通过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; 在此处输入图片说明

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


15
tool.jar %JAVA_HOME%\lib;不在bin文件夹中。
GMsoF '16

5
这是否意味着我们应该同时将%JAVA_HOME%/bin和同时添加%JAVA_HOME%/libPath变量中?
埃里克

3
即使tools.jar确实位于\ lib中,也可以在解决方案中仅向路径中添加\ bin对我有用,但不要问为什么。
PHPirate '17

1
通常,需要重新启动/注销才能使更改生效。
reiner_zuphall

4
我必须删除PATH条目C:\ ProgramData \ Oracle \ Java \ javapath并将其替换为C:\ ProgramData \ Oracle \ Java \ jdk1.8.xxx,它默认为姐妹JRE目录
John

76

找到了。系统属性“ 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")

28
那么,如何用gradle在思想上设置java.home呢?
Chinaxing 2014年

73

我在使用Eclipse尝试执行Gradle Task时遇到了相同的错误。每次我运行命令(即战争)时,该过程都会引发如下异常:

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

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

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

再次运行,享受!


2
经过数小时的搜索,我找到了这个答案,并且最终成功了。非常感谢!
Alan47

5
我找不到Open Gradle Run和Java Home。您能进一步解释吗?

对此不熟悉,如何“转到“ Gradle Task”视图?我在“查看”菜单下没有看到Gradle的任何内容,也没有标记类似的内容?
德隆兹

48

我刚刚添加了一个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。24.对我的作品在Fedora
samsong8610

36

我在使用Ubuntu时也遇到过类似的情况。该计算机仅安装了JRE。因此,我只是执行了以下命令来安装JDK

sudo apt install openjdk-8-jdk


1
是的,安装JDK而不是JRE也为我解决了这个问题。
peschü

20

我也在为此解决方案苦苦挣扎。描述找到了一个更好的方式将它与摇篮这里。我们可以从Gradle本身获取JVM / JDK信息。

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

很简单。


3
如果我使用它compile而不对我有用runtime
Dori

我喜欢这个解决方案。美观且便携。
亚当·潘伯

4
此解决方案不适用于Gradle4.x。我得到一个NullPointerException
Thunderforge

1
我可以想象,当最新的JDK没有可用的tools.jar时,它返回null。见github.com/gradle/gradle/blob/master/subprojects/base-services/…–
Mohammed

17

在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安装。现在工作了!再次感谢!
Matheus Gontijo

谢谢理查德。它也为我工作。基本上,这是一个JAVA_HOME路径问题,试图在所需的Java jdk路径中找到tools.jar。
rajdeepbs29 '18

16

将此添加到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

11

可能为时已晚了两年,但最近我遇到了同样的问题,这是找到这篇文章后最终得出的解决方案:

import javax.tools.ToolProvider

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

如果java.home指向不在JDK目录下的目录,甚至在Mac OS上您具有classes.jar而不是tools.jar的目录,它也应该起作用。


不能调用方法getURLs()空对象
别有用心

10

使用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


9

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

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

这应该是Windows可接受的答案:)
谢谢

6

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

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

这对我行得通)!


同样的问题,为我解决了,也赢得了Windows 10 / Android Studio。另外,上述解决方案似乎都没有下载“ Tools.jar”……只是jre没有提供)
Erik Aronesty

也为我工作。我在项目根目录中创建了gradle.properties,其中包含org.gradle.java.home=E:\\Android Studio\\jre
br4nnigan

3

的Linux

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

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

视窗

  1. 启动系统控制面板小程序(开始-设置-控制面板-系统)。
  2. 选择高级选项卡。
  3. 单击环境变量按钮。
  4. 在“系统变量”下,单击“添加”按钮,然后经过以下几行:

    在变量名中: JAVA_HOME

    可变值: C:\Program Files\Java\jdk1.x.x_xxx

    其中x.x_xxxJDK版本,你可以从这里得到你的JDK版本C:\Program Files\Java

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

    %JAVA_HOME%/bin;


路径可能会略有不同。在Fedora中,这与我一起工作JAVA_HOME="/usr/lib/jvm/java-openjdk"
rvf

3

这对我有用:

我收到消息

任务':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文件夹中。
  • 重试。

3

如果您使用终端进行构建,并且出现此错误,则可以在gradle.properties文件中指向与android studio捆绑在一起的jdk :

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

2

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

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

所以代替

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

我不得不用

org.gradle.java.home = C:/程序文件/Java/jdk1.8.0_65

然后构建成功

问题在于该项目是使用JRE而不是JDK构建的,并且由于我是从eclipse构建的,因此它也可以正常工作:

  • 在Window> Preferences> Gradle> Arguments中,指定Workspace JRE并指定您的JDK。
  • 在“窗口”>“首选项”>“ Java”>“ InstalledJRE”中,将您的JDK指定为默认值



1

您是否确定tools.jar放在编译类路径上?也许路径不正确。

task debug << {
    configurations.compile.each { println it }
}

是的,确实做到了上课,但仍然遇到问题。
Abhishek Gupta

1

通过“打开Gradle运行配置”中的JAVA_HOME选项卡添加JDK路径将解决此问题。


0

我已经尝试了大多数顶级选项,但似乎我的环境设置有问题,因此它们无济于事。什么解决这个问题对我来说是重新安装 jdk1.8.0_201jre1.8.0_201这解决了这个错误我。希望能对某人有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.