Xây dựng Maven không thành công: “Không thể định vị Trình biên dịch Javac trong: jre hoặc jdk issue”


112

Tôi đã đặt JAVA_HOME của mình thành:

C:\Program Files (x86)\Java\jdk1.6.0_18

Sau khi chạy maven install, tôi nhận được thông báo này từ Eclipse :

Lý do:

Unable to locate the Javac Compiler in:
  C:\Program Files (x86)\Java\jre6\..\lib\tools.jar
Please ensure you are using JDK 1.4 or above and
not a JRE (the com.sun.tools.javac.Main class is required).
In most cases you can change the location of your Java
installation by setting the JAVA_HOME environment variable.

Tôi chắc chắn rằng đây là một phần khó khăn

Hãy đảm bảo rằng bạn đang sử dụng JDK 1.4 trở lên và không phải là JRE

Khi tôi chạy cấu hình, nó được đặt thành JRE6. Làm cách nào để thay đổi nó thành JDK 1.6 mà tôi đã cài đặt?

Tôi thậm chí đã cố gắng sửa đổi plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <executable>C:\Program Files (x86)\Java\jdk1.6.0_18\bin</executable>
    </configuration>
</plugin>

Tôi vẫn nhận được cùng một lỗi.

Tôi sử dụng plugin Eclipse Maven. Làm cách nào để thay đổi từ JRE sang JDK trong Eclipse?


Bạn đã kiểm tra kỹ bằng lệnh dòng setlệnh để đảm bảo rằng JAVA_HOME đã được đặt thành như bạn nghĩ chưa?
Powerlord

Tôi đang sử dụng java hàng ngày .. mọi thứ hoạt động tốt ở đây: java -version .6.0_18-ea" time Environment (build 1.6.0_18-ea-b04) ) Client VM (build 16.0-b11, mixed mode, sharing)
Gandalf StormCrow

1
Đặt <fork> true </fork> khi thiết lập tệp thực thi.
Robin

Điều đó không thực sự cho chúng tôi biết cài đặt Java nào java -versionđang chạy; nó có thể là cài đặt JRE hoặc JDK. javac -versionsẽ hữu ích hơn một chút. Tuy nhiên, ngay cả khi PATH đúng và JAVA_HOME sai, chúng vẫn hiển thị theo cách bạn mong đợi.
Powerlord

1
Ngoài ra, tệp thực thi phải là ... \ bin \ javac, bạn phải chỉ định tệp thực thi thực sự, không chỉ đường dẫn.
Robin

Câu trả lời:


141

Bạn có thể thử cập nhật JDK Eclipse đang sử dụng, như sau:

Thêm và đặt JRE trong menu WindowPreferences ...JavaCác JRE đã cài đặt :

JRE type: Standard VM JRE
Name: jdk1.6.0_18
JRE home directory: C:\Program Files (x86)\Java\jdk1.6.0_18

Nếu không đúng như vậy, có thể dấu ngoặc và dấu cách trong đường dẫn JAVA_HOME đang gây ra sự cố. Thử sao chép JDK của bạn sang một vị trí khác và cập nhật JAVA_HOME của bạn.


1
Nó thực sự là phần đầu của câu hỏi của bạn, JAVA_HOME điều là ok
Gandalf StormCrow

47
Đối với tôi thêm một bước là cần thiết: đi đến tính chất của dự án- nói> java xây dựng path-> libraries-> chọn "Thư viện Hệ thống JRE", nhấp vào Chỉnh sửa và chọn "Workspace JRE mặc định"
maayank

1
đối với tôi là không đủ, tôi phải chỉnh sửa eclipse.ini. Tôi tin rằng có một lỗi.
ruhsuzbaykus

Nó chỉ hoạt động với tôi khi tôi kiểm tra jdk thích hợp trong Môi trường thực thi -> JRE tương thích.
Vedran

9
Ngoài ra, nếu bạn chạy Maven từ cấu hình chạy nhật thực mà bạn đã tạo trước khi những thay đổi cấu hình này, hãy nhớ chuyển đến cửa sổ Chạy cấu hình / tab JRE và chọn JRE phù hợp. Nếu không, bạn có thể đang sử dụng JRE sai cũ ngay cả sau khi cập nhật cài đặt nhật thực và dự án của bạn lên cái mới.
Diana

20

Tệp eclipse.ini cần vmđối số để trỏ đến vị trí JDK của bạn.

Chỉnh sửa eclipse.initệp để trỏ đến nhà JDK của bạn, như sau:

-vm
C:\Program Files\Java\jdk1.6.0_06

Điều này đảm bảo rằng Eclipse sẽ chạy khỏi JDK chứ không phải bất kỳ JRE mặc định nào trên máy của bạn.


5
Điều này đã khắc phục sự cố của tôi. Từ nghiên cứu trên web, có vẻ như Maven sử dụng JAVA_HOME, nhưng Maven Plugin không biết gì về JAVA_HOME và thay vào đó, mặc định là VM được sử dụng để khởi động Eclipse.
jnosek

13

Bạn thử:

Đi tới Preferences/Java/Installed JREsvà thêm một cái cho vị trí "C:\Program Files\Java\jdk1.6.0_27\jrehoặc cái gì đó tương tự.

Xóa cái cho C:\Program Files\Java\jre6

Như bạn có thể thấy, đường dẫn C:\Program Files\Java\jre6\..\lib\tools.jarchỉ có ý nghĩa nếu phần đầu tiên (cho đến khi / ..) được thay thế bằng C:\Program Files\Java\jdk1.6.0_27\jre.


10

Đặt fork thành true đã giải quyết được vấn đề cho tôi.

<configuration>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
</configuration>

9

Tôi đã có chính xác cùng một vấn đề! Tôi đã tìm kiếm và tìm kiếm trong nhiều ngày vì tất cả những thứ lảm nhảm về "đặt -vm c: \ program files \ java \ jdkxxxxx \ bin" trong ini ar làm đối số cho một phím tắt không giúp ích được gì !

(Tôi nghe có vẻ bực bội phải không? Tin tôi đi, đó là một cách nói quá! Tôi chỉ đơn giản là tức giận vì tôi đã mất một tuần để cố gắng làm cho Maven đáng tin cậy!)

Tôi đã có những hành vi rất khó lường. Đôi khi nó được biên dịch và đôi khi không. Nếu tôi đã làm một maven clean, nó không thể tìm thấy trình biên dịch và không thành công. Nếu sau đó tôi thay đổi thứ gì đó trong đường dẫn xây dựng, nó đột nhiên hoạt động trở lại !!

Cho đến khi tôi vào menu WindowPreferencesJavaInstalled JRE's . Tôi đã thêm một JRE mới bằng cách sử dụng vị trí của JDK và sau đó xóa JRE. Đột nhiên Maven chạy ổn định!

Có lẽ điều này đáng để đưa vào các chữ cái có cỡ chữ 30 hoặc lâu hơn trong sổ tay Apache?

Với tất cả sự tôn trọng, điều này đơn giản là gây phẫn nộ cho cộng đồng Java! Tôi không thể tưởng tượng được tất cả những người này đã mất bao nhiêu ngày, cố gắng giải quyết vấn đề của họ như thế này! Tôi không thể tưởng tượng điều này được phát hành như một phiên bản cuối cùng. Cá nhân tôi thậm chí không dám phát hành một thứ như vậy dưới tên phần mềm beta ...

Trân trọng theo cách nào đó .... Sau một tuần xáo trộn cuối cùng tôi cũng có thể bắt đầu phát triển. Tôi hy vọng ông chủ của tôi sẽ không phát hiện ra điều này. Tôi đã mất rất nhiều nỗ lực để thuyết phục anh ấy không sử dụng .NET và tôi đã cảm thấy rất tiếc về điều đó.


1
Điểm mấu chốt, sử dụng nó từ giao diện điều khiển không phải từ nhật thực bạn sẽ không có loại vấn đề này, đó là những gì tôi đã nhận ra sau vài tháng sử dụng nó, bây giờ khá thoải mái với maven
Gandalf StormCrow

Nó giống như một vấn đề nhật thực ... m2e .. Tôi có cùng một vấn đề và IDE thứ khác (netbeans và IDEA) hoạt động hoàn hảo.
joshua

3

Tôi gặp vấn đề tương tự khi sử dụng Run as -> Maven install trong Eclipse. JAVA_HOME và eclipse.ini đã ổn và trỏ đến JDK mới nhất của tôi. Nhưng m2clipse đã sử dụng JRE. Sử dụng mvn cài đặt bên ngoài Eclipse hoạt động tốt!

Trong trường hợp của tôi, tôi đã giải quyết vấn đề như sau:

  1. Điều hướng trong Eclipse: menu WindowPreferencesJavaCác JRE đã cài đặt
  2. Có hai mục không hoạt động cho JRE và JDK. Phiên bản hoạt động là JDK được cài đặt mới nhất. Xóa tất cả các mục nhập trừ mục Maven nên sử dụng.

Tôi nghĩ Maven không tính đến cái nào đang hoạt động ...



3

Tôi vừa cài đặt Maven 3.0.4, thiết lập M2_HOME, M2JAVA_HOMEphù hợp. Sau đó tôi chạy các lệnh sau:

mvn archetype:generate....

mvn compile

Tôi đã thất bại nhắn như: maven unable to locate javac compiler.

Trên máy tính của tôi, theo mặc định, tôi đã cài đặt JRE tại C: \ program files \ java \ jre.1.6 . Và tôi có C: \ java \ jdk1.6 khácJAVA_HOMEđược đặt thành C: \ java \ jdk1.6 này .

Tôi không thấy có gì sai với cài đặt của mình. Sau khi tìm kiếm, tôi quyết định xem xét mvn.bat, tôi lặp lại %JAVA_HOME%từng bước và nó hiển thị chính xác C:\java\jdk1.6, nhưng khi tôi chạy lệnh mvn --version, nó hiển thị Java home: C: \ program files \ java \ jre1.1.6 .

Cuối cùng, tôi phát hiện ra rằng tôi chỉ cần đặt -Djava.home=c:\java\jdk1.6như trong lệnh bên dưới và hiện hoạt động tốt:

%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Djava.home=%JAVA_HOME%" "-Dmaven.home=%M2_HOME%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%

Lưu ý: Điều này dành cho mvndòng lệnh chứ không phải với Eclipse.


Này, bạn không cần phải đi và luôn giải thích từng bước bạn đã làm. Vui lòng xem Cách trả lời cho điểm .
mtk

Điều đó có vẻ giống như một vụ hack (nhưng này ... nếu nó phù hợp với bạn!) Nhưng điều thú vị là dòng lệnh maven chọn nhầm nhà java - đây là vấn đề hiện tại của chúng tôi.
plasma147

2

Tôi đã giải quyết vấn đề bằng cách thay đổi vị trí của Installed JRE thành thư mục có trong chính JDK. Đặt giá trị thích hợp của JAVA_HOMEbiến môi trường không giải quyết được vấn đề.

Trong trường hợp của tôi, có hai thư mục

  • C:\Program Files\Java\jdk1.7.0_03 --> For JDK

  • C:\Program Files\Java\jre7 --> For JRE

Ban đầu, tôi đặt C:\Program Files\Java\jre7là Cài đặt JRE trong Eclipse và tôi gặp lỗi tương tự trong trường hợp Maven (Ant đang hoạt động tốt).

Bằng cách thay đổi JRE đã cài đặt thành JRE đã C:\Program Files\Java\jdk1.7.0_03\jre7cài đặt trong Eclipse, vấn đề đã được giải quyết.


2

Đừng quên rằng nếu bạn đang chạy dự án của mình từ một cấu hình Eclipse cụ thể, bạn nên thay đổi Java Runtime trong 'Run Configurations' -> 'Your maven configuration' -> 'JRE tab' sau khi bạn thêm đúng JDK vào tùy chọn Eclipse của bạn.


2

Có vẻ như Maven đang sử dụng JRE, không phải JDK. Có lẽ bạn đã cài đặt Maven trước khi cài đặt JDK?

Kiểm tra các tệp cài đặt . Có ba trong tổng số, hệ thống, người dùng và dự án. Rất có thể nó nằm trong cấu hình cài đặt ($ M2_HOME / conf / settings.xml) hoặc có thể là cấu hình cho mỗi người dùng ($ {user.dir} /. M2 / settings.xml).


2

Chỉ thiết lập Eclipse

Thực hiện các bước sau:

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

  2. Đường dẫn xây dựng Java → Thư viện

  3. Chọn Thư viện hệ thống JRE → Nhấp vào Editnút

  4. Nhấp vào nút "JRE đã cài đặt ..."

  5. Chỉnh sửa JRE thành: Đặt JRE Home = JAVA_HOME hoặc JAVA_HOME \ jre

Ảnh chụp màn hình:

Nhập mô tả hình ảnh tại đây


Điều này làm việc cho tôi, cảm ơn bạn. Tôi đã thay đổi nhà JRE thành thư mục JDK.
LadyBernkastel

1

Nhấp chuột phải vào menu Dự ánThuộc tínhĐường dẫn xây dựng Java .

Chọn Đường dẫn Hệ thống JRE → Chỉnh sửa . Chọn JRE mặc định của không gian làm việc và trỏ nó đến JDK> 1.4.


1

Sử dụng menu WindowPreferencesJavaInstalled JREsExecution En Environment -> nhấp vào hộp kiểm ở phía bên phải.


1

Giải pháp rất đơn giản. Đôi khi Eclipse WindowsPreferencesJavaJRE đã cài đặt trỏ đến C:\Program files\Java\jre.

Khi tôi thay đổi nó thành C:\Program files\Java\JDK 6.0\jrenó đã hoạt động 100%.


1

Như đã đề cập bởi một số người khác, Cửa sổ Eclipse → Tùy chọn ...JavaCác JRE đã cài đặt phải trỏ đến JDK bạn đã cài đặt, chứ không phải JRE. Chỉ sau đó nó mới có thể tìm thấy ../libthư mục được đề cập trong thông báo lỗi.

Ngay cả với điều này, vấn đề có thể tái diễn. Cách thoát của tôi trong Eclipse v4.2 (Juno) là thực hiện một menu MavenCập nhật dự án ... sau đó sự cố biến mất.

Tôi nghi ngờ lý do là một số tệp được tạo Eclipse (.classpath, .project, .preferences) nằm trong Subversion cho dự án mà tôi đang gặp phải những sự cố này. Do đó, bản cập nhật SVN giới thiệu sự cố và bản cập nhật cấu hình từ Maven trong Eclipse sẽ giải quyết lại sự cố.

Giải pháp thực tế: bỏ qua tệp .files do Eclipse tạo ra khỏi kiểm soát phiên bản và để plugin Maven Eclipse xử lý cấu hình dự án. (Các gợi ý / đề xuất bổ sung được hoan nghênh) .


1

Trong trường hợp của tôi, trong menu Eclipse RunDebug Configurations .

Trong tab JRE, chọn JDK thay vì JRE đã giải quyết được vấn đề.


1

Tôi đã gặp vấn đề tương tự trên Amazon Linux. Hóa ra tôi phải cài đặt phiên bản dành cho nhà phát triển của JDK:

sudo yum -y install java-1.7.0-openjdk-devel

1

Đi tới menu của Eclipse Cửa sổTùy chọn ...JavaCác JRE đã cài đặt phải trỏ đến JDK bạn đã cài đặt, không phải JRE.


Nhưng điều này cũng có trong vô số câu trả lời trước đây.
Peter Mortensen

0

Bạn cũng có thể đảm bảo rằng Eclipse có tất cả các thay đổi được cập nhật. Để thực hiện việc này, hãy nhấp chuột phải vào dự án của bạn và sau đó nhấn vào mục menu "Làm mới".


0

Nhiều câu trả lời khác yêu cầu bạn trỏ Eclipse của mình tới JDK thay vì JRE.

Đây là một câu trả lời khác cụ thể / rõ ràng hơn [những gì tôi đã thấy trong bất kỳ câu trả lời nào ở đây] từng bước về cách làm điều đó: Bạn cài đặt JDK như thế nào?

Đó là những gì đã giải quyết cho tôi cho cùng một vấn đề này.


0

Đảm bảo rằng "-vm" trong eclipse.ini của bạn nằm trên hai dòng rõ ràng, tức là:

-vm
C:\Program Files\Java\jdk1.6.0_06

0

Tôi đoán rằng vị trí của trình biên dịch được xác định trong POM để plugin trình biên dịch ở vị trí JRE được hiển thị, thay vì vị trí JDK mà bạn có JAVA_HOME trỏ đến.


@Robin Tôi nên tìm kiếm điều đó chính xác ở đâu? quả pom trông ổn đối với tôi<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.6</source> <target>1.6</target>
Gandalf StormCrow

Nếu không có <executable> được xác định, thì đây không phải là nguyên nhân gây ra sự cố của bạn, trừ khi pom bạn đang xem kế thừa từ pom mẹ đã định nghĩa nó.
Robin

Khi xác định tệp thực thi, bạn cũng phải đặt <fork> thành true.
Robin

0

Bạn cần chỉ ra JAVA_HOMEtrong mvn.ini(nó nằm trong thư mục Maven /bin), và vấn đề của bạn sẽ biến mất.


0

Nếu bạn đặt JAVA_HOME và sự cố vẫn tiếp diễn, hãy thử cách sau.

(Tôi gặp sự cố tương tự, trên một PC mới được cài đặt.)

Giả sử bạn đang sử dụng Eclipse.

  • Mở Cửa sổTùy chọnJavaĐã cài đặt jre . Xóa tất cả những gì bạn có ở đó, thêm những thứ bạn muốn sử dụng (JDK, không có JRE!)
  • Trong cùng một cửa sổ mở maven - các bản cài đặt, thêm bản cài đặt Maven mà bạn đã tải xuống và giải nén ở đâu đó. ( Không sử dụng cài đặt Maven được nhúng. Nó có một số lỗi đã biết.)

Đó là tất cả. Dự án của bạn sẽ không bị những vấn đề như vậy.


0

Tôi đã gặp lỗi tương tự, do phiên bản JUnit . Tôi đã có ba 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 đế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>

0

Tôi đã thay đổi cấu hình của maven-compiler-plugin để thêm executableforkcó giá trị true.

<configuration>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
    <executable>C:\Program Files\Java\jdk1.6.0_18\bin\javac</executable>
</configuration>

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


0

Làm Echo %JAVA_HOME%và sau đó mvn --version.

Đường dẫn JRE phải giống nhau ... sau đó vào menu WindowPreferencesJava → Vị trí của JRE đã cài đặt phải giống với những gì Java_Homeđang hiển thị.


0

Đi tới hộp thoại Thuộc tính và nhấp chuột phải vào dự án.

Trong Tài nguyên được liên kết , thêm một đường dẫn mới có tên JAVA_HOME và đặt vào vị trí JDK của bạn, giống như "C: \ Program Files \ Java \ jdk1.8.0_73".

Đó là tất cả!!


Tôi không nghĩ bạn nên thêm bất kỳ biến nào .. chỉ cần thay đổi cấu hình JDK trong Chạy tìm kiếm thành không gian làm việc JDK
Phani

0

Giải pháp cho vấn đề này rất đơn giản ...

Nếu bạn không có tệp xây dựng Ant thì hãy tạo tệp đó. Trong Eclipse, bạn có thể dễ dàng tạo tệp Ant .

Tham khảo liên kết tạo tệp xây dựng Ant [ http://www.codejava.net/ides/eclipse/how-to-create-ant-build-file-for-existing-java-project-in-eclipse] .

Bây giờ hãy làm theo các bước đã cho:

1) Thêm tệp xây dựng Ant của bạn trong chế độ xem Ant đang ở trong cửa sổ xem.

2) nhấp chuột phải vào tệp xây dựng Ant của bạn và chọn Run As và tùy chọn thứ hai trong "Ant Build" đó.

3) Bây giờ một hộp thoại sẽ mở ra với các tùy chọn và tab khác nhau.

4) Chọn tab JRE .

5) Bạn sẽ thấy ba nút radio và chúng sẽ được chọn JRE hoặc JDK làm tùy chọn.

6) Xem xét cẩn thận nếu các tùy chọn nút radio đang có JRE như được chọn, sau đó thay đổi nó thành JDK .

7) Nhấp vào áp dụng.

Đó là nó...!!!

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.