Gradle không tìm thấy tools.jar


160

Tôi đang sử dụng các tài liệu javadoc với gradle, vì vậy tôi cần sử dụng gói tools.jar, trong thư mục lib từ jdk (1.6.0_26 trong trường hợp của tôi).

Vấn đề là gradle không tự động lấy nó, vì vậy tôi đã thêm gói công cụ đó vào thư mục libs của mình, sau đó thêm nó vào Depencies.gradle.

Bây giờ tôi muốn đưa nó trực tiếp từ nhà JDK của tôi vào phần phụ thuộc của tôi. Có cách nào làm được việc này không? Tôi đã thử tiếp theo trong phần phụ thuộc của mình.gradle:

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

Nhưng nó không tìm thấy nó trong khi biên dịch.


2
Điều đáng nói là, là con trỏ trước để giải quyết vấn đề này và khi tôi gặp phải điều này, bạn sẽ cần đảm bảo rằng bạn thực sự đã cài đặt JDK: P Và, trên một số hệ thống, bạn sẽ cần cài đặt gói JDK phát để nhận tools.jar
mrooney

Câu trả lời:


140

Tôi gặp vấn đề này khi tôi đang cố chạy các lệnh thông qua CLI.

Đó là một vấn đề với hệ thống nhìn vào thư mục JRE tức là D:\Program Files\Java\jre8\bin. Nếu chúng ta nhìn vào đó, không có Tools.jar, do đó có lỗi.

Bạn cần tìm vị trí của JDKnó, trong trường hợp của tôi: D:\Program Files\Java\jdk1.8.0_11và nếu bạn nhìn vào libthư mục, bạn sẽ thấy Tools.jar.

Những gì tôi đã làm tôi đã tạo ra một biến môi trường mới JAVA_HOME: nhập mô tả hình ảnh ở đây

Và sau đó, bạn cần chỉnh sửa biến PATH của mình để bao gồm JAVA_HOME, tức là %JAVA_HOME%/bin; nhập mô tả hình ảnh ở đây

Mở lại dấu nhắc lệnh và nên chạy.


15
tool.jar %JAVA_HOME%\lib;không có trong binthư mục.
GMsoF

5
điều này có nghĩa là chúng ta nên thêm cả hai %JAVA_HOME%/bin%JAVA_HOME%/libvào Pathbiến sau đó?
Eric

3
Mặc dù tools.jar thực sự nằm trong \ lib, chỉ thêm \ bin vào đường dẫn như trong giải pháp có hiệu quả với tôi nhưng đừng hỏi tại sao.
PHPirate

1
Thông thường, khởi động lại / đăng xuất là cần thiết để thay đổi có hiệu lực.
reiner_zuphall

4
Tôi đã phải xóa mục PATH C: \ ProgramData \ Oracle \ Java \ javapath và thay thế nó bằng C: \ ProgramData \ Oracle \ Java \ jdk1.8.xxx nó được mặc định là thư mục JRE chị em
John

76

Tìm thấy rồi. Thuộc tính hệ thống 'java.home' không phải là biến môi trường JAVA_HOME. JAVA_HOME trỏ đến JDK, trong khi java.home chỉ vào JRE. Xem trang đó để biết thêm.

Soo ... Vấn đề của tôi là điểm bắt đầu của tôi là thư mục jre (C: \ jdk1.6.0_26 \ jre) chứ không phải thư mục jdk (C: \ jdk1.6.0_26) như tôi nghĩ (tools.jar nằm trên C : \ jdk1.6.0_26 \ thư mục lib). Dòng biên dịch trong phụ thuộc. Nâng cấp phải là:

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

28
Vì vậy, làm thế nào để thiết lập java.home trong ý tưởng với gradle?
Trung Quốc

73

Tôi đã gặp lỗi tương tự khi sử dụng Eclipse khi cố gắng thực hiện Nhiệm vụ Gradle. Mỗi lần tôi chạy một lệnh (tức là chiến tranh), quy trình đã tạo ra một ngoại lệ như:

Không thể tìm thấy tools.jar. Vui lòng kiểm tra xem C: \ Program Files \ Java \ Jre8 "có phải là bản cài đặt JDK hợp lệ không.

Tôi đã thử giải pháp được liệt kê trong bài viết này nhưng không ai trong số họ giải quyết vấn đề này. Đây là giải pháp của tôi:

  1. Chuyển đến chế độ xem "Nhiệm vụ cấp"
  2. Nhấp chuột phải vào nhiệm vụ bạn muốn thực hiện
  3. Chọn cấu hình Open Gradle Run
  4. Trong tab "Trang chủ Java", chọn kho lưu trữ JDK cục bộ của bạn, sau đó bấm OK

Chạy lại, thưởng thức!


2
Tôi đã tìm thấy câu trả lời này sau nhiều giờ tìm kiếm, và điều này cuối cùng đã hoạt động. Cảm ơn bạn rất nhiều!
Alan47

5
Tôi không thể tìm thấy Open Gradle Run và Java Home. Bạn có thể giải thích thêm?

Là người mới đối với điều này, làm thế nào một người "Chuyển đến chế độ xem" Nhiệm vụ cấp lớp "? Tôi không thấy bất cứ điều gì Gradle dưới menu View, cũng không có gì được dán nhãn như vậy?
Dronz

48

Tôi vừa thêm một gradle.propertiestập tin với nội dung sau:

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

5
Trên linux, bạn cũng có thể chỉnh sửa ~/.gradle/gradle.propertiestập tin, thêm org.gradle.java.home=/usr/lib/jvm/java. Làm việc cho tôi trên Fedora 24.
samsong8610

36

Tôi đã có một trường hợp tương tự bằng cách sử dụng Ubuntu . Máy chỉ có cài đặt JRE . Vì vậy, tôi chỉ thực hiện lệnh bên dưới để cài đặt JDK .

sudo apt install openjdk-8-jdk


1
Có, cài đặt JDK thay vì JRE cũng giải quyết vấn đề cho tôi.
peschü

20

Tôi đã đấu tranh cũng như cho Giải pháp này. Tìm thấy một cách tốt hơn cho nó với Gradle như được mô tả ở đây . Chúng ta có thể lấy thông tin JVM / JDK từ chính Gradle.

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

Quá đơn giản.


3
Điều này hiệu quả với tôi nếu tôi sử dụng compilethay vìruntime
Dori

Tôi thích giải pháp này. Nó đẹp và di động.
Adam Plumb

4
Giải pháp này không hoạt động với Gradle 4.x. Tôi nhận được một NullPointerException.
Thunderforge

1
Tôi có thể tưởng tượng nó trả về null khi không có tools.jar có sẵn với JDK mới nhất. Xem github.com/gradle/gradle/blob/master/subprojects/base-service/ mẹo
Mohammed

17

Trong CentOS7, gói phát triển sẽ cài đặt tools.jar. Tệp không có trong java-1.8.0-openjdk

sudo yum install java-1.8.0-openjdk-devel


Cảm ơn Richard! Nó thực sự giúp tôi! Tôi đã gặp khó khăn khi chạy "Reac -igen run-android" và gặp lỗi: * Điều gì đã sai: Thực thi không thành công cho nhiệm vụ ': app: compileDebugJavaWithJavac'. > Không thể tìm thấy tools.jar. Vui lòng kiểm tra xem /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-5.b14.fc27.x86_64/jre có chứa bản cài đặt JDK hợp lệ. Bây giờ nó đang hoạt động! Cảm ơn một lần nữa!
Matheus Gontijo

Cảm ơn Richard .. Nó cũng làm việc cho tôi. Về cơ bản, đây là sự cố đường dẫn JAVA_HOME đã cố gắng tìm tools.jar trong đường dẫn java jdk mong muốn.
rajdeepbs29

16

Thêm cái này vào gradle.properties:

org.gradle.java.home = C: \ Tệp chương trình \ Java \ jdk1.8.0_91


7
Đừng quên sử dụng dấu gạch chéo ngược. Ví dụ : org.gradle.java.home=C:\\Program Files\\Java\\jdk1.8.0_144\ .
CoolMind

11

Có thể là hai năm quá muộn, nhưng tôi đã gặp phải vấn đề tương tự gần đây và đây là giải pháp tôi đã kết thúc sau khi tìm thấy bài đăng này :

import javax.tools.ToolProvider

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

Nó sẽ hoạt động nếu java.home trỏ đến một thư mục không thuộc thư mục JDK và ngay cả trên Mac OS nơi bạn có class.jar thay vì tools.jar.


Không thể invoke getURLs phương pháp () trên đối tượng null
thầm kín

10

Với Centos 7, tôi đã thấy rằng chỉ có JDK tools.jar, trong khi JRE thì không . Tôi đã cài đặt Java 8 JRE ( yum install java-1.8.0-openjdk), nhưng không phải JDK ( yum install java-1.8.0-openjdk-devel).

Cài đặt sau giải quyết vấn đề. Ngoài ra, hãy nhớ đặt JAVA_HOME.


9

Trên windows 10, tôi gặp phải vấn đề tương tự và đây là cách tôi khắc phục vấn đề;

  1. Truy cập Advance System Settings>Environment Variables>System Variables
  2. Chọn PATH ghi đè mặc định C:\ProgramData\Oracle\Java\javapath
  3. Với bản cài đặt jdk của riêng bạn, đó là JAVA_HOME =C:\Program Files\Java\jdk1.8.0_162

đây sẽ là câu trả lời được chấp nhận cho Windows :)
cảm ơn

6

Trên hệ thống của tôi (Win 10, JRE 1.8.0, Android Studio 3.1.2, Gradle 4.1) không có tools.jartrong thư mục JRE ( C:\Program Files\Java\jre1.8.0_171).

Tuy nhiên, tôi đã tìm thấy nó C:\Program Files\Android\Android Studio\jre\libvà thử cài đặtJAVA_HOME=C:\Program Files\Android\Android Studio\jre

Nó ổn với tôi)!


Vấn đề tương tự, đã sửa nó cho tôi, cũng Win 10 / Android Studio. Ngoài ra, không có giải pháp nào ở trên thực sự có vẻ tải xuống "Tools.jar" ... chỉ không đi kèm với jre)
Erik Aronesty

Làm việc cho tôi quá. Tôi đã tạo một gradle.property trong thư mục gốc có chứaorg.gradle.java.home=E:\\Android Studio\\jre
br4nnigan

3

Linux

Mở /etc/environmenttrong bất kỳ trình soạn thảo văn bản nào như nano hoặc gedit và thêm dòng sau:

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

các cửa sổ

  1. Khởi động applet Bảng điều khiển hệ thống (Bắt đầu - Cài đặt - Bảng điều khiển - Hệ thống).
  2. Chọn tab Nâng cao.
  3. Nhấp vào nút Biến môi trường.
  4. Trong Biến hệ thống, bấm vào nút thêm, sau đó qua các dòng sau:

    trong tên biến: JAVA_HOME

    trong giá trị biến: C:\Program Files\Java\jdk1.x.x_xxx

    nơi x.x_xxxjdk phiên bản bạn có thể nhận được phiên bản jdk của mình từ đâyC:\Program Files\Java

  5. Trong Biến hệ thống, chọn Đường dẫn, sau đó nhấp vào Chỉnh sửa, sau đó nhấp vào nút mới, sau đó qua dòng sau:

    %JAVA_HOME%/bin;


Đường dẫn có thể thay đổi một chút. Ở Fedora, điều này làm việc với tôi vớiJAVA_HOME="/usr/lib/jvm/java-openjdk"
rvf

3

Điều này làm việc cho tôi:

Tôi đã nhận được tin nhắn

Thực thi không thành công cho nhiệm vụ ': app: compileDebugJavaWithJavac'.

Không thể tìm thấy tools.jar. Vui lòng kiểm tra xem C: \ Program Files \ Java \ jre1.8.0_121 có chứa bản cài đặt JDK hợp lệ không.

  • Trong Android Studio, hãy kiểm tra Vị trí SDK của bạn.
  • Tệp, Cấu trúc dự án, Vị trí SDK, Vị trí JDK.
  • Ví dụ: C: \ android-studio \ android-studio \ jre
  • Sao chép tệp tools.jar trong thư mục C: \ android-studio \ android-studio \ jre \ lib vào thư mục C: \ Program Files \ Java \ jre1.8.0_121 \ lib.
  • Thử lại.

3

Nếu bạn sử dụng thiết bị đầu cuối để xây dựng và bạn gặp lỗi này, bạn có thể trỏ đến jdk đi kèm với studio android trong gradle.propertiestệp của bạn :

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

2

Giống như các câu trả lời khác, tôi đặt thuộc tính org.gradle.java.home trong tệp gradle.properIES . Nhưng đường dẫn với \ separators không hoạt động (xây dựng trên windows 10):

Nhà Java được cung cấp qua 'org.gradle.java.home' không hợp lệ. Thư mục không hợp lệ: C: Chương trình FilesJavajdk1.8.0_65

Vì vậy, thay vì

org.gradle.java.home = C: \ Tệp chương trình \ Java \ jdk1.8.0_65

tôi đã phải sử dụng

org.gradle.java.home = C: / Tệp chương trình / Java / jdk1.8.0_65

sau đó xây dựng thành công

Vấn đề là dự án được xây dựng bằng JRE thay vì JDK và vì tôi đã xây dựng nó từ nhật thực nên điều này cũng hoạt động:

  • Trong Window> Preferences> Gradle> Argories chỉ định JRE của Workspace và chỉ định JDK của bạn.
  • Trong Window> Preferences> Java> InstalledJREs chỉ định JDK của bạn làm mặc định


2

Tôi đã giải quyết vấn đề theo cách này:


Phải sao chép nó vào C:\Program Files (x86)\Java\jre1.8.0_211C:\Program Files (x86)\Java\jre1.8.0_251
TessavWalstijn

1

Bạn có chắc chắn rằng tools.jar đã thực hiện nó trên đường dẫn lớp biên dịch không? Có thể đường dẫn không chính xác.

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

Vâng, nó đã làm cho nó đến đường dẫn lớp, nhưng vẫn nhận được vấn đề.
Abhishek Gupta

1

Thêm đường dẫn JDK thông qua tab JAVA_HOME trong "Cấu hình chạy lớp mở" sẽ giải quyết vấn đề.


0

Tôi đã thử hầu hết các tùy chọn hàng đầu nhưng có vẻ như tôi đã gặp sự cố với thiết lập môi trường của mình nên chúng không giúp được gì. Có gì giải quyết vấn đề này đối với tôi là để cài đặt lại jdk1.8.0_201jre1.8.0_201và điều này đã giải quyết được lỗi cho tôi. Hy vọng rằng sẽ giúp được ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.