Niepowodzenie kompilacji Mavena: „Nie można zlokalizować kompilatora Javac w: problem z jre lub jdk”

112

Mam ustawione JAVA_HOME na:

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

Po uruchomieniu maven installotrzymuję tę wiadomość od Eclipse :

Powód:

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.

Jestem pewien, że to jest trudna część

Upewnij się, że używasz JDK 1.4 lub nowszego, a nie JRE

Kiedy uruchamiam konfigurację, jest ustawiony na JRE6. Jak zmienić go na JDK 1.6, który już zainstalowałem?

Próbowałem nawet zmodyfikować wtyczkę:

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

Nadal pojawia się ten sam błąd.

Używam wtyczki Eclipse Maven. Jak mogę zmienić JRE na JDK w Eclipse?

Gandalf StormCrow
źródło
Czy sprawdziłeś dwukrotnie za pomocą polecenia wiersza setpoleceń, aby upewnić się, że JAVA_HOME jest ustawiony na to, co myślisz?
Powerlord
Używam javy na co dzień. Tutaj wszystko działa dobrze: 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
Ustaw <fork> true </fork> podczas ustawiania pliku wykonywalnego.
Robin,
To właściwie nie mówi nam, która instalacja Java java -versionjest uruchomiona; może to być instalacja JRE lub JDK. javac -versionbyłoby trochę bardziej przydatne. Jednak nawet wtedy, jeśli PATH jest poprawna, a JAVA_HOME jest błędna, nadal będą one wyglądać tak, jak można się spodziewać.
Powerlord
1
Ponadto plik wykonywalny powinien być ... \ bin \ javac, musisz określić rzeczywisty plik wykonywalny, a nie tylko ścieżkę.
Robin,

Odpowiedzi:

141

Możesz spróbować zaktualizować JDK Eclipse w następujący sposób:

Dodaj i ustaw środowisko JRE w menu OknoPreferencje ...JavaZainstalowane środowiska JRE :

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

Jeśli tak nie jest, możliwe, że nawiasy i spacje w ścieżce JAVA_HOME powodują problemy. Spróbuj skopiować zestaw JDK do innej lokalizacji i zaktualizować JAVA_HOME.

lucrussell
źródło
1
To rzeczywiście pierwsza część twojego pytania, JAVA_HOME wszystko jest w porządku
Gandalf StormCrow
47
Dla mnie potrzebny był dodatkowy krok: przejście do właściwości wspomnianego projektu-> ścieżka budowania java-> biblioteki-> wybierz „Biblioteka systemowa JRE”, kliknij Edytuj i wybierz „Domyślny JRE obszaru roboczego”
maayank
1
nie było dla mnie wystarczające, musiałem edytować eclipse.ini. Uważam, że jest błąd.
ruhsuzbaykus
U mnie zadziałało tylko wtedy, gdy sprawdziłem odpowiedni jdk w środowisku wykonawczym -> Kompatybilne JRE.
Vedran
9
Ponadto, jeśli uruchamiasz Mavena z konfiguracji uruchamiania zaćmienia, którą utworzyłeś przed tymi zmianami konfiguracji, pamiętaj, aby przejść do okna Uruchom konfigurację / zakładkę JRE i wybrać odpowiednie środowisko JRE. W przeciwnym razie możesz używać starego, niewłaściwego środowiska JRE nawet po zaktualizowaniu ustawień zaćmienia i projektu do nowego.
Diana
20

Plik eclipse.ini wymaga vmargumentu wskazującego lokalizację JDK.

Edytuj eclipse.iniplik, aby wskazywał na twój dom JDK, coś w następujący sposób -

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

Gwarantuje to, że Eclipse będzie działał z JDK, a nie z domyślnym JRE na twoim komputerze.

Sai Hegde
źródło
5
To rozwiązało mój problem. Z badań w Internecie wynika, że ​​Maven używa JAVA_HOME, ale wtyczka Maven nic nie wie o JAVA_HOME i zamiast tego domyślnie używa maszyny wirtualnej używanej do uruchomienia Eclipse.
jnosek
13

Próbujesz:

Idź do Preferences/Java/Installed JREsi dodaj jeden dla lokalizacji "C:\Program Files\Java\jdk1.6.0_27\jrelub coś w tym stylu.

Usuń ten dla C:\Program Files\Java\jre6

Jak widać, ścieżka C:\Program Files\Java\jre6\..\lib\tools.jarma sens tylko wtedy, gdy pierwsza część (do / ..) zostanie zastąpiona przez C:\Program Files\Java\jdk1.6.0_27\jre.

cuocdoibian1971
źródło
10

Ustawienie widelca na true rozwiązało problem za mnie.

<configuration>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
</configuration>
Prash
źródło
9

Miałem dokładnie ten sam problem! Szukałem i szukałem przez wiele dni, ponieważ wszystkie bełkot o "wstaw -vm c: \ program files \ java \ jdkxxxxx \ bin" w ini ar jako argument dla skrótu nie pomogły !

(Czy nie brzmię na sfrustrowanego? Uwierz mi, to mało powiedziane! Jestem po prostu wściekły, ponieważ straciłem tydzień, próbując uczynić Mavena niezawodnym!)

Zachowywałem się bardzo nieprzewidywalnie. Czasami się kompilował, a czasami nie. Gdybym to zrobił maven clean, nie mógł znaleźć kompilatora i nie powiódł się. Gdybym potem zmienił coś w ścieżce kompilacji, nagle znowu zadziałało !!

Dopóki nie przeszedłem do menu OknoPreferencjeJavaZainstalowane JRE . Dodałem nowe środowisko JRE, korzystając z lokalizacji JDK, a następnie usunąłem środowisko JRE. Nagle Maven zaczął działać stabilnie!

Może warto umieścić litery o rozmiarze czcionki 30 lub więcej w podręczniku Apache?

Z całym szacunkiem jest to po prostu oburzające dla społeczności Java! Nie mogę sobie wyobrazić, ile dni stracili ci wszyscy ludzie, próbując rozwiązać swoje problemy tego rodzaju! Nie mogę sobie wyobrazić, że jest to wersja ostateczna. Osobiście nie odważyłbym się nawet wydać czegoś takiego pod nazwą oprogramowanie beta ...

Z poważaniem tak czy inaczej… Po tygodniu majstrowania mogę wreszcie zacząć się rozwijać. Mam nadzieję, że mój szef się o tym nie dowie. Wiele wysiłku kosztowało mnie przekonanie go, żeby nie chodził na .NET i już jest mi z tego powodu przykro.

Lorenzo
źródło
1
Podsumowując, używaj go z konsoli, a nie z zaćmienia, nie będziesz miał tego rodzaju problemów, oto co sobie uświadomiłem po kilku miesiącach używania, teraz całkiem wygodnie z mavenem
Gandalf StormCrow
To bardziej zaćmienie ... problem m2e .. Mam ten sam problem, a inne IDE (netbeans i IDEA) działają doskonale.
joshua
3

Mam ten sam problem, używając Uruchom jako -> Maven zainstalować w Eclipse. JAVA_HOME i eclipse.ini były w porządku i wskazywały na mój najnowszy JDK. Ale m2clipse używał JRE. Korzystanie z instalacji mvn poza Eclipse działało dobrze!

W moim przypadku problem rozwiązałem następująco:

  1. Nawiguj w Eclipse: menu OknoPreferencjeJavaZainstalowane środowiska JRE
  2. Były dwa nieaktywne wpisy dla środowiska JRE i JDK. Aktywnym był najnowszy zainstalowany JDK. Usuń wszystkie wpisy poza tym, którego Maven powinien użyć.

Myślę, że Maven nie bierze pod uwagę, który z nich jest aktywny ...

Markus
źródło
3

Właśnie zainstalowano Maven 3.0.4 ustaw M2_HOME, M2i JAVA_HOMEodpowiednio. Następnie uruchomiłem następujące polecenia:

mvn archetype:generate....

mvn compile

Dostałem wiadomość nie powiodło, takich jak: maven unable to locate javac compiler.

Na moim komputerze domyślnie zainstalowane jest środowisko JRE w lokalizacji C: \ program files \ java \ jre.1.6 . I mam drugie C: \ java \ jdk1.6 i JAVA_HOMEustawione na C: \ java \ jdk1.6 .

Nie widziałem nic złego w moim ustawieniu. Po wyszukaniu postanowiłem zajrzeć mvn.bat, powtarzałem %JAVA_HOME%każdy krok i wyświetlało się poprawnie jako C:\java\jdk1.6, ale po uruchomieniu polecenia mvn --versionwyświetliło się Java home: C: \ program files \ java \ jre1.1.6 .

W końcu dowiedziałem się, że wystarczy ustawić -Djava.home=c:\java\jdk1.6jak w poniższym poleceniu i teraz działa dobrze:

%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%

Uwaga: dotyczy mvnto wiersza poleceń, a nie Eclipse.

smngo
źródło
Hej, nie musisz iść i zawsze wyjaśniać każdy krok, który zrobiłeś. Zobacz, jak odpowiedzieć na temat .
mtk
Wydaje się, że to hack (ale hej ... jeśli to działa!), Ale interesujące jest to, że wiersz poleceń maven wybiera niewłaściwą stronę główną Java - to jest nasz bieżący problem.
plazma147
2

Rozwiązałem problem, zmieniając lokalizację zainstalowanego środowiska JRE na katalog obecny w samym JDK. Ustawienie odpowiedniej wartości JAVA_HOMEzmiennej środowiskowej nie rozwiązało problemu.

W moim przypadku są dwa katalogi

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

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

Początkowo ustawiłem C:\Program Files\Java\jre7jako Zainstalowane JRE w Eclipse i otrzymywałem ten sam błąd w przypadku Mavena (Ant działał dobrze).

Zmiana zainstalowanego środowiska JRE na C:\Program Files\Java\jdk1.7.0_03\jre7Zainstalowane środowisko JRE w Eclipse rozwiązuje problem.

Nikhil
źródło
2

Nie zapominaj, że jeśli uruchamiasz swój projekt z konkretnej konfiguracji Eclipse, powinieneś zmienić środowisko wykonawcze Java w 'Run Configurations' -> 'Your Maven configuration' -> 'JRE tab' po dodaniu odpowiedniego JDK do Twoje preferencje Eclipse.

Ivan Fernandez
źródło
2

Wygląda na to, że Maven używa środowiska JRE, a nie JDK. Być może zainstalowałeś Mavena przed zainstalowaniem JDK?

Sprawdź pliki ustawień . W sumie są trzy: system, użytkownik i projekt. Najprawdopodobniej jest to konfiguracja instalacji ($ M2_HOME / conf / settings.xml) lub, być może, konfiguracja dla użytkownika ($ {user.dir} /. M2 / settings.xml).

Devon_C_Miller
źródło
2

Tylko konfiguracja Eclipse

Wykonaj następujące kroki:

  1. Kliknij prawym przyciskiem myszy Właściwości projektu Eclipse

  2. Ścieżka budowania Java → Biblioteki

  3. Wybierz JRE System Library → Kliknij Editprzycisk

  4. Kliknij przycisk „Zainstalowane środowiska JRE ...”

  5. Edytuj JRE jako: Ustaw JRE Home = JAVA_HOME lub JAVA_HOME \ jre

Zrzut ekranu:

Tutaj wprowadź opis obrazu

Parthasarathy B.
źródło
To zadziałało dla mnie, dziękuję. Zmieniłem katalog główny JRE na folder JDK.
LadyBernkastel
1

Kliknij prawym przyciskiem myszy menu ProjektWłaściwościŚcieżka budowania Java .

Wybierz ścieżkę systemową JRE → Edytuj . Wybierz domyślne środowisko JRE obszaru roboczego i wskaż je JDK> 1.4.

jak jego
źródło
1

Użyj menu OknoPreferencjeJavaZainstalowane środowiska JREŚrodowiska wykonawcze -> kliknij pole wyboru po prawej stronie.

Gambotic
źródło
1

Rozwiązanie jest proste. Czasami Eclipse WindowsPreferencjeJavaZainstalowane JRE wskazuje naC:\Program files\Java\jre .

Po zmianie na C:\Program files\Java\JDK 6.0\jreto działa w 100%.

Santhosh
źródło
1

Jak wspomniało kilku innych, okno Eclipse → Preferencje ...JavaZainstalowane środowiska JRE powinno wskazywać na zainstalowany pakiet JDK , a nie na środowisko JRE. Dopiero wtedy może znaleźć ../libfolder wymieniony w komunikacie o błędzie.

Mimo to problem może się powtórzyć. Moim wyjściem w Eclipse v4.2 (Juno) jest zrobienie menu MavenAktualizuj projekt ... po czym problem znika.

Podejrzewam, że powodem jest to, że niektóre pliki wygenerowane przez Eclipse (.classpath, .project, .preferences) znajdują się w Subversion dla projektu, w którym mam te problemy. Tak więc aktualizacja SVN wprowadza problem, a aktualizacja konfiguracji z Mavena w Eclipse rozwiązuje go ponownie.

Prawdziwe rozwiązanie: pomiń wygenerowane przez Eclipse pliki .files z kontroli wersji i pozwól wtyczce Maven Eclipse obsłużyć konfigurację projektu. (Dodatkowe wskazówki / sugestie są mile widziane) .

avandeursen
źródło
1

W moim przypadku w menu Eclipse RunDebug Configurations .

Na karcie JRE wybranie JDK zamiast JRE rozwiązało problem.

Vathsala Weerasinghe
źródło
1

Miałem ten sam problem na Amazon Linux. Okazuje się, że musiałem zainstalować wersję deweloperską JDK:

sudo yum -y install java-1.7.0-openjdk-devel
Evan Siroky
źródło
1

Przejdź do menu Eclipse OknoPreferencje ...JavaZainstalowane środowiska JRE powinny wskazywać na zainstalowany pakiet JDK, a nie na środowisko JRE.

Sudipto
źródło
Ale jest to również w wielu poprzednich odpowiedziach.
Peter Mortensen
0

Możesz również upewnić się, że Eclipse ma wszystkie zaktualizowane zmiany. Aby to zrobić, kliknij prawym przyciskiem myszy projekt, a następnie wybierz opcję „Odśwież”.

GregNash
źródło
0

Wiele innych odpowiedzi mówi, aby skierować Eclipse do JDK zamiast JRE.

Oto kolejna odpowiedź z bardziej szczegółowymi / jasnymi [niż widziałem w jakiejkolwiek odpowiedzi tutaj], krok po kroku, jak to zrobić: Jak zainstalować JDK?

To właśnie rozwiązało mnie dla tego samego problemu.

cellepo
źródło
0

Upewnij się, że "-vm" w twoim eclipse.ini znajduje się w dwóch oddzielnych wierszach, tj .:

-vm
C:\Program Files\Java\jdk1.6.0_06
Kevin Van Dyck
źródło
0

Domyślam się, że lokalizacja kompilatora jest zdefiniowana w POM, aby wtyczka kompilatora znajdowała się w wyświetlanej lokalizacji JRE, zamiast lokalizacji JDK, na którą wskazuje JAVA_HOME.

Rudzik
źródło
@Robin Gdzie dokładnie mam tego szukać? Pom wygląda mi dobrze<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
Jeśli nie zdefiniowano elementu <executable>, to nie jest to przyczyną problemu, chyba że plik pom, na który patrzysz, dziedziczy po nadrzędnym pom, który go zdefiniował.
Robin
Definiując plik wykonywalny, musisz również ustawić <fork> na true.
Robin
0

Musisz wskazać JAVA_HOMEw mvn.ini(jest w folderze Maven /bin), a twój problem zniknie.

Javicha
źródło
0

Jeśli ustawisz JAVA_HOME, a problem nadal występuje, spróbuj wykonać następujące czynności.

(Miałem ten sam problem na świeżo zainstalowanym komputerze).

Zakładając, że używasz Eclipse.

  • Otwórz oknoPreferencjeJavaZainstalowane jre . Usuń wszystko, co tam masz, dodaj to, czego chcesz użyć (JDK, brak JRE!)
  • W tym samym oknie otwórz maven - instalacje, dodaj pobraną i rozpakowaną instalację Mavena. ( Nie używaj wbudowanej instalacji Mavena. Zawiera ona kilka znanych błędów).

To wszystko. Twój projekt nie będzie cierpieć z powodu takich problemów.

Marcell
źródło
0

Miałem ten sam błąd z powodu wersji JUnit . Miałem trzy wersje 3.8.1 i zmieniłem na 4.8.1.

Tak więc rozwiązaniem jest:

Musisz iść do POM i upewnić się, że twoja zależność wygląda tak

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.1</version>
  <scope>test</scope>
</dependency>
Ibo
źródło
0

Zmieniłem konfigurację wtyczki maven-compiler-plugin, aby dodać executablei forkz wartością 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>

U mnie to zadziałało.

Soumyajit Swain
źródło
0

Zrób Echo %JAVA_HOME%i wtedy mvn --version.

Ścieżka do JRE powinna być taka sama ... następnie przejdź do menu OknoPreferencjeJava → Lokalizacja zainstalowanego środowiska JRE powinna być taka sama, jak Java_Homewyświetlana.

vandana
źródło
0

Przejdź do okna dialogowego Właściwości i kliknij projekt prawym przyciskiem myszy.

W zasobach połączonych dodaj nową ścieżkę o nazwie JAVA_HOME i umieść w lokalizacji JDK, na przykład „C: \ Program Files \ Java \ jdk1.8.0_73”.

To wszystko!!

Macu Gómez
źródło
Nie sądzę, abyś dodawał jakąkolwiek zmienną ... po prostu zmień konfigurację JDK w obszarze Uruchom ustawienia na obszar roboczy JDK
Phani
0

Rozwiązanie tego problemu jest bardzo proste ...

Jeśli nie masz pliku kompilacji Ant , wygeneruj go. W Eclipse możesz łatwo utworzyć plik Ant .

Skorzystaj z linku, aby utworzyć plik kompilacji Ant [ http://www.codejava.net/ides/eclipse/how-to-create-ant-build-file-for-existing-java-project-in-eclipse] .

Teraz wykonaj podane czynności:

1) Dodaj swój Ant plik build Ant w widoku, który jest w widoku okna.

2) kliknij prawym przyciskiem myszy plik kompilacji Ant i wybierz opcję Uruchom jako oraz drugą opcję w tej „Kompilacji Ant”.

3) Teraz otworzy się okno dialogowe z różnymi opcjami i zakładkami.

4) Wybierz kartę JRE .

5) Zobaczysz trzy przyciski opcji i będą one miały JRE lub JDK wybrane jako opcja.

6) Sprawdź uważnie, czy w opcjach przycisku radiowego wybrano środowisko JRE, a następnie zmień je na JDK .

7) Kliknij zastosuj.

Otóż ​​to...!!!

Nishat Lakhani
źródło