Maven Không thể định vị Trình biên dịch Javac trong:


76

Khi tôi cố gắng tạo một tệp war, nó sẽ hiển thị một số lỗi như

[ERROR] Unable to locate the Javac Compiler in:
[ERROR] C:\Program Files\Java\jre7\..\lib\tools.jar

Khi tôi làm điều echo %path%đó cho thấy

 C:\Windows\System32;D:\name\name1\Softwares\Maven\apache-maven-3.0.4\b
in;C:\Program Files\Notepad++\;%JDK_HOME%

Khi tôi làm echo %JDK_HOME%

D:\name\name\core java\software\Java\Java_1.6.0_04_win\jdk1.6.0_04\bin

Tôi không biết tại sao maven lại nhắc đến jre, khi biến môi trường của tôi là jdk. Tôi cũng thay đổi JRE đã cài đặt thành jdk1.6.


3
JDK_HOME phải là thư mục cơ sở, tức là không có \binvà bạn nên có %JDK_HOME%\bintrong đường dẫn của mình. Bạn có thể chạy D:\name\name\core java\software\Java\Java_1.6.0_04_win\jdk1.6.0_04\bin\java -version?
Peter Lawrey

3
Maven mong đợi JAVA_HOMEđược đặt thành thư mục cài đặt JDK của bạn, không phải JDK_HOME. Xem hướng dẫn cài đặt Maven .
Jesper

Câu trả lời:


152

Nó chỉ trong thiết lập Eclipse

Nó có 4 bước CẦN LÀM.

Bước 1: Nhấp chuột phải vào Thuộc tính dự án Eclipse

Bước 2: Đường dẫn xây dựng Java -> Thư viện

Bước 3: Chọn Thư viện Hệ thống JRE -> Nhấp vào nút Chỉnh sửa -> Nhấp vào nút Cài đặt JREs ...

Bước 4: Chỉnh sửa JRE thành Đặt JRE Home = JAVA_HOME

ScreentShot:

nhập mô tả hình ảnh ở đây


2
tôi gặp vấn đề tương tự và tôi đã làm như bạn hiển thị ở đây ... và bây giờ nó hoạt động tốt, nhưng tôi đang tự hỏi làm thế nào đến bây giờ nó đã hoạt động tốt mà không có thay đổi này (thiết lập java home thành jre). cho tôi dự án của tôi hoạt động tốt cho đến bây giờ nhưng đột nhiên tôi gặp lỗi này khi tôi chạy lại dự án của mình trong nhật thực.
trước

@Preeth: Cuối cùng thì nhật thực của bạn có thể đã lập bản đồ JDK. nếu bạn đã đã loại bỏ JDK hoặc cập nhật bạn có vấn đề này
Parthasarathy B

1
Eclipse thường tham chiếu đến JRE bên ngoài JDK. Bạn nên thay đổi đường dẫn thành JDK / jre. Nó làm việc cho tôi.
emeraldhieu

35

Đi tới Window -> Preferences ... -> Java -> Installed JREs

Chỉnh sửa JRE Home = JAVA_HOME hoặc JAVA_HOME \ jre

Ví dụ: nếu bạn sử dụng jdk1.6.0_04 được cài đặt trong C: \ Program Files, hãy thực hiện thay đổi sau:

C: \ Program Files \ Java \ jdk1.6.0_04 \ jre hoặc C: \ Program Files \ Java \ jdk1.6.0_04 thay vì mặc định ở C: \ Program Files \ Java \ jre7


1
Nó hoạt động nếu bạn đang sử dụng eclipse (chạy dưới dạng bản dựng maven ..) Nhưng lỗi này đã được giải quyết bằng cách đặt biến môi trường java_home. Dù sao, cảm ơn câu trả lời của bạn, thưa ngài, nó đã làm việc cho tôi trên nhật thực.
porfiriopartida

Điều này đã làm việc với tôi, nhưng wow - Thật khó chịu sau khi thiết lập mọi JAVA_HOME, JDK_HOME, JRE_HOME, v.v. có thể thành lập trình jdk (hoặc jdk / jre) của tôi.
RockMeetHardplace

5

Gặp phải vấn đề tương tự, nhưng trong trường hợp của tôi, nhật thực thư mục đã chỉ ra JRE là JDK. Vì vậy, tôi đã tìm kiếm tools.jar đó và ở đó.

tôi đã làm

  • Đường dẫn xây dựng Java >> Thư viện
  • Thư viện hệ thống JRE >> Chỉnh sửa
  • Các JRE đã cài đặt >> nhấp vào jdk của tôi >> chỉnh sửa
  • Thêm lọ ngoài >> tools.jar

Và sau đó được biên dịch tốt


3

Biến JDK_HOME phải luôn trỏ đến dir cơ sở của jdk, không phải dir bin:

D:\name\name\core java\software\Java\Java_1.6.0_04_win\jdk1.6.0_04

Điều đó đã xác định, hãy sửa đường dẫn của bạn để trở thành

C:\Windows\System32;D:\name\name1\Softwares\Maven\apache-maven-3.0.4\bin;C:\Program Files\Notepad++\;%JDK_HOME%\bin

3

Đó là một vấn đề Eclipse. Khi tôi cố gắng tạo nó từ dòng lệnh bằng cách sử dụng

mvn package

nó hoạt động tốt.


2

Có vẻ như bạn đã JDK_HOMExác định là biến người dùng và PATHđược định nghĩa là biến Hệ thống, hoặc ngược lại - echo %PATH%không được chứa các biến chưa được giải quyết như ...;%JDK_HOME%.

Đảm bảo rằng %JDK_HOME%\binđường dẫn nằm trên biến PATH của bạn, chưa được giải quyết, ngay cả khi bạn phải đặt đường dẫn một cách rõ ràng.


2

Tôi đã gặp lỗi tương tự, do phiên bản JUNIT, tôi có 3 3.8.1 và tôi đã thay đổi thành 4.8.1.

vì vậy giải pháp là

bạn phải chuyển đến POM và đảm bảo rằng người phụ thuộc của bạn trông như thế này

 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.1</version>
  <scope>test</scope>
</dependency>

2

Đối với những người khác gặp phải vấn đề này trong Eclipse ngay cả khi đường dẫn được đặt thành JDK chính xác, bạn cần phải xóa các JRE khác khỏi JRE đã cài đặt.

Đi tới Window -> Preferences -> Java -> Installed JREs

Chọn từng JRE không sử dụng và Xóa

Nó đã làm việc cho tôi.


1

Tôi đã thử tất cả các đề xuất ở trên nhưng không hiệu quả với tôi, nhưng tôi đã tìm thấy cách khắc phục lỗi trong trường hợp của mình.

Các bước sau đã làm cho dự án biên dịch thành công:

Trong trình khám phá dự án, nhấp chuột phải vào dự án, chọn “thuộc tính” Trong cây bên phải, đi tới đường dẫn xây dựng Java. Chọn tab "thư viện". Nhấp vào “Thêm thư viện”. Chọn thư viện hệ thống JRE. Bấm tiếp. Chọn nút radio JRE thay thế. Nhấp vào “đã cài đặt JRE's”. Chọn JRE với phiên bản phù hợp. Nhấp vào Appy và đóng. Trong màn hình tiếp theo, nhấp vào kết thúc. Trong cửa sổ thuộc tính, nhấp vào Áp dụng và đóng. Trong trình khám phá dự án, nhấp chuột phải vào pom.xml của bạn và chọn chạy dưới dạng> xây dựng maven Trong hộp văn bản mục tiêu, hãy viết “cài đặt”. Nhấp vào Chạy.

Điều này làm cho dự án xây dựng thành công trong trường hợp của tôi.


0

Trong Eclipse, các hành động như nhập dự án Maven hoặc gọi "Nguồn cập nhật" chạy trong cùng một JVM mà Eclipse đang chạy. Nếu JVM đó đến từ JRE mà không phải là một phần của JDK, thì sẽ không có trình biên dịch Java (the tools.jar).

Vì vậy, để khởi chạy Maven từ bên trong Eclipse, JRE được sử dụng để khởi chạy cũng cần phải đến từ JDK. Theo mặc định, Eclipse đăng ký JRE nó được khởi động, nhưng điều này có thể được định cấu hình trên trang tùy chọn "Window / Preferences… / Java / Installed JREs" như Parthasarathy đã đề cập ở trên

Ngoài ra, bạn có thể chỉ định compilerId trong pom.xml, vì vậy Maven sẽ không tìm kiếm JDK khi biên dịch mã Java:

 <plugin>
  <artifactid>maven-compiler-plugin</artifactid>
  <configuration>
    <compilerid>eclipse</compilerid>
  </configuration>
  <dependencies>
    <dependency>
      <groupid>org.codehaus.plexus</groupid>
      <artifactid>plexus-compiler-eclipse</artifactid>
      <version>xxxx</version>
    </dependency>
  </dependencies>
</plugin>

0

Tôi đã gặp phải một vấn đề tương tự và vì không có ai đăng cách tiếp cận tương tự như của tôi, tôi xin tiếp tục.

Điều hướng đến cấu hình chạy mà bạn muốn khởi chạy.
Ở đó đã chọn tab JRE. Điều chỉnh "Runtime JRE" ở đó và bạn đã sẵn sàng.


0

Tôi có thể giải quyết bằng cách thực hiện các bước sau:

Nhấp chuột phải vào dự án chọn Đường dẫn xây dựng -> Định cấu hình đường dẫn xây dựng -> chọn Tab Thư viện -> sau đó chọn Thư viện Hệ thống JRE [phiên bản bạn có cho tôi JavaSE-1.7] -> nhấp vào nút Chỉnh sửa -> Trong cửa sổ Thư viện Hệ thống JRE chọn Môi trường thực thi - Trong danh sách thả xuống, bạn có thể chọn JDK được liệt kê cho tôi JavaSE-1.7 của nó -> bên cạnh nhấp chuột vào nút Môi trường -> Trong cửa sổ Môi trường thực thi, bạn phải chọn lại java SE của mình cho tôi JavaSE-1.7 của nó -> chỉ cần chọn nó , bạn sẽ có các tùy chọn trong tab JREs tương thích, vì vậy hãy chọn JDK mà bạn muốn có trong trường hợp của tôi là jdk1.7.0_25 của nó.


Nhấp vào ok và kết thúc các cửa sổ còn lại bằng cách thực hiện hành động thích hợp Ok / Kết thúc.

Cuối cùng là làm sạch Maven và cài đặt Maven.


Câu trả lời này sẽ tốt hơn nếu nó cho biết bạn đang sử dụng ứng dụng nào. :)
JakeRobb

0

Nó phụ thuộc vào phiên bản Maven. Khi bạn cài đặt phiên bản Maven mới hơn, lỗi này sẽ không xuất hiện. Bạn cũng có thể thêm một thư mục khác với tệp tools.jar lib / tools.jar - nó cũng giải quyết được vấn đề này.


0

Nếu bạn đang thực hiện tất cả các bước trên có thể bị nhầm lẫn và vấn đề của chúng tôi chỉ là thiếu tools.jre, vì vậy chỉ cần thêm tools.jre theo các bước sau và vấn đề sẽ được giải quyết.

Bước 1: Trong nhật thực, đi tới Windows -> tùy chọn

Bước 2: Java -> JRE đã cài đặt (Nhấp đúp vào nó)

Bước 3: Nhấp vào nút Chỉnh sửa -> Nhấp vào Thêm JAR bên ngoài

Bước 4: Bây giờ chọn đường dẫn tools.jar

bây giờ áp dụng các thay đổi và nó hoạt động tốt.

Đây là chụp màn hình


0

Mặc dù có một số câu trả lời không phải Eclipse ở trên cho câu hỏi này không đề cập đến Eclipse, chúng yêu cầu thay đổi biến đường dẫn. Một giải pháp thay thế là sử dụng tùy chọn dòng lệnh, java.home, ví dụ:

mvn package -Djava.home="C:\Program Files\Java\jdk1.8.0_161\jre"

Lưu ý \ jre ở cuối - một điều cần thiết đáng ngạc nhiên.


0

Không có câu trả lời hiện tại nào giúp tôi ở đây. Chúng tôi đã nhận được một cái gì đó như:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:
    #.#.#:compile (default-compile) on project Streaming_Test: Compilation failure
[ERROR] Unable to locate the Javac Compiler in:
[ERROR] /opt/java/J7.0/../lib/tools.jar

Điều này xảy ra vì cài đặt Java đã xác định rằng đó là cài đặt JRE. Nó mong đợi có nội dung JDK bên trên thư mục con JRE, do đó có ../libtrong đường dẫn. Của chúng tôi tools.jarlà trong $JAVA_HOME/lib/tools.jarkhông $JAVA_HOME/../lib/tools.jar.

Rất tiếc, chúng tôi không có tùy chọn để cài đặt JDK trên hệ điều hành của mình (đừng hỏi) nên đó không phải là một tùy chọn. Tôi đã khắc phục sự cố bằng cách thêm phần sau vào maven pom.xml:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <fork>true</fork>  <!-- not sure if this is also needed -->
      <executable>${JAVA_HOME}/bin/javac</executable>
      <!--        ^^^^^^^^^^^^^^^^^^^^^^ -->
    </configuration>
  </plugin>

Bằng cách trỏ tệp thực thi đến đúng nơi, điều này ít nhất đã vượt qua được các lỗi biên dịch của chúng tôi.


-1

Đối với Intellij Idea, hãy thiết lập mọi thứ một cách thích hợp (tương tự như thế này):

JAVA_HOME = C:\Program Files\Java\jdk1.8.0_60
JRE_HOME = JAVA_HOME\jre

và đừng quên khởi động lại Idea . Chương trình này chọn các biến khi bắt đầu nên bất kỳ thay đổi nào đối với các biến đối đầu trong khi chương trình đang chạy sẽ không có bất kỳ ảnh hưởng nào.

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.