Gradle не находит tools.jar


160

Я использую javadoc doclets с Gradle, поэтому мне нужно использовать пакет tools.jar, который находится в папке lib из jdk (1.6.0_26 в моем случае).

Дело в том, что gradle не принимает его автоматически, поэтому я добавил этот пакет инструментов в папку libs, а затем добавил его в dependencies.gradle.

Теперь я хочу перенести его прямо из моего JDK-дома в мой dependencies.gradle. Есть ли способ сделать это? Я попробовал следующее в моей зависимости.

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

Но он не находит его при компиляции.


2
Стоит отметить, что в качестве предварительного указателя на решение этой проблемы, и когда я столкнулся с ней, вам нужно убедиться, что у вас действительно установлен JDK: P И в некоторых системах вы будете необходимо установить пакет JDK devel, чтобы получить tools.jar
mrooney

Ответы:


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

5
это значит , что мы должны добавлять как %JAVA_HOME%/binи %JAVA_HOME%/libк Pathпеременной тогда?
Эрик

3
Несмотря на то, что tools.jar действительно находится в \ lib, добавление только \ bin к пути, как в решении, сработало для меня, но не спрашивайте, почему.
PHPirate

1
Обычно перезагрузка / выход из системы требуется для того, чтобы изменения имели эффект.
reiner_zuphall

4
Мне пришлось удалить запись PATH C: \ ProgramData \ Oracle \ Java \ javapath и заменить ее на C: \ ProgramData \ Oracle \ Java \ jdk1.8.xxx, в которой по умолчанию находился дочерний каталог JRE
Джон

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
Итак, как установить java.home в идею с Gradle?
Chinaxing

73

Я получил ту же ошибку, используя Eclipse, пытаясь выполнить задачу Gradle. Каждый раз, когда я запускаю команду (то есть войну), процесс выдает исключение вроде:

Не удалось найти tools.jar. Пожалуйста, проверьте, что C: \ Program Files \ Java \ Jre8 "является допустимой установкой JDK.

Я попробовал решение, указанное в этом посте, но никто из них не решил эту проблему. Вот мое решение:

  1. Перейти к представлению «Задача Gradle»
  2. Щелкните правой кнопкой мыши на задачу, которую вы хотите выполнить
  3. Выберите Open Gradle Run Configuration
  4. На вкладке «Домашняя страница Java» выберите локальный репозиторий JDK и нажмите кнопку «ОК».

Беги снова, наслаждайся!


2
Я нашел этот ответ после нескольких часов поиска, и это, наконец, сработало. Спасибо вам большое!
Alan47

5
Я не могу найти Open Gradle Run и Java Home. Можешь объяснить дальше?

Будучи новичком в этом, как можно перейти к представлению «Задача Gradle»? Я не вижу ничего Gradle в меню View, и ничего такого не помечено?
Дронз

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. У меня работает на Fedora 24.
samsong8610

36

У меня был похожий случай с использованием Ubuntu . На машине была установлена ​​только JRE . Итак, я только что выполнил команду ниже, чтобы установить JDK .

sudo apt install openjdk-8-jdk


1
Да, установка JDK вместо JRE также решила проблему для меня.
Песчу

20

Я также боролся за это решение. Нашел лучший способ с Gradle, как описано здесь . Мы можем получить информацию о JVM / JDK от самого Gradle.

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

Так просто.


3
Это работает для меня, если я использую compileвместоruntime
Дори

Мне нравится это решение. Это красиво и портативно.
Адам Пламб

4
Это решение не работает с Gradle 4.x. Я получаю NullPointerException.
Громовая

1
Я могу вообразить, что он возвращает ноль, когда нет доступных tools.jar с последней версией JDK. См. Github.com/gradle/gradle/blob/master/subprojects/base-services/…
Мухаммед

17

В CentOS7 пакет разработки установит tools.jar. Файл отсутствует в java-1.8.0-openjdk

sudo yum install java-1.8.0-openjdk-devel


Спасибо, Ричард! Это действительно помогло мне! Я изо всех сил пытался запустить «response-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, которая пыталась найти tools.jar в желаемом пути java jdk.
rajdeepbs29

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 () для нулевого объекта
Ulterior

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

Это подходит для меня)!


Та же проблема, исправленная для меня, также Win 10 / Android Studio. Кроме того, ни одно из вышеперечисленных решений на самом деле, кажется, не загружает "Tools.jar" ... просто не идет с jre)
Эрик Аронести,

У меня тоже сработало. Я создал gradle.properties в корне проекта, содержащемorg.gradle.java.home=E:\\Android Studio\\jre
br4nnigan

3

Linux

Откройте /etc/environmentлюбой текстовый редактор, например, nano или gedit, и добавьте следующую строку:

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

Windows

  1. Запустите апплет Панели управления системой (Пуск - Настройки - Панель управления - Система).
  2. Выберите вкладку «Дополнительно».
  3. Нажмите кнопку Переменные среды.
  4. В разделе «Системные переменные» нажмите кнопку «Добавить» и пройдите следующие строки:

    в имени переменной: JAVA_HOME

    в значении переменной: C:\Program Files\Java\jdk1.x.x_xxx

    где x.x_xxxверсия JDK вы можете получить здесь свою версию JDKC:\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
  • Скопируйте файл tools.jar в папку C: \ android-studio \ android-studio \ jre \ lib в папку C: \ Program Files \ Java \ jre1.8.0_121 \ lib.
  • Retry.

3

Если вы используете терминал для сборки и у вас есть эта ошибка, вы можете указать на jdk в комплекте с android studio в вашем gradle.propertiesфайле:

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

2

Как и другие ответы , которые я установить org.gradle.java.home свойство в gradle.properties файле. Но путь с \ разделителями не работал (сборка на windows 10):

Дом Java, предоставленный через org.gradle.java.home, недействителен. Неверный каталог: 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, и так как я собирал его из затмения, это также сработало:

  • В Window> Preferences> Gradle> Arguments укажите JRE Workspace и укажите свой JDK.
  • В Window> Preferences> Java> InstalledJREs укажите JDK по умолчанию


2

Я решил проблему следующим образом:


Пришлось скопировать его C:\Program Files (x86)\Java\jre1.8.0_211иC:\Program Files (x86)\Java\jre1.8.0_251
TessavWalstijn

1

Вы удостоверились, что tools.jar сделал это на пути к классам компиляции? Возможно путь неверный.

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

Да, он сделал это к пути к классу, но все еще получает проблему.
Абхишек Гупта

1

Добавление пути JDK через вкладку JAVA_HOME в «Open Gradle Run Configuration» решит проблему.


0

Я пробовал большинство лучших вариантов, но, похоже, у меня что-то не так с настройкой среды, поэтому они не помогли. То, что решило проблему для меня, было переустановить, jdk1.8.0_201 и jre1.8.0_201это решило ошибку для меня. Надеюсь, что это помогает кому-то.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.