Błąd krytyczny podczas kompilacji: nieprawidłowe wydanie docelowe: 1.8 -> [Pomoc 1]


170

Podobny problem jak w przypadku nieprawidłowego wydania docelowego: 1.7, ale po śledzeniu bloga mój problem nadal nie został rozwiązany.

Nie udało się wykonać celu org.apache.maven.plugins: maven-compiler-plugin: 3.1: kompilacja (domyślna kompilacja) w projekcie hm_app: Błąd krytyczny kompilacja: nieprawidłowe wydanie docelowe: 1.8 -> [Pomoc 1]

I szedł jako samouczek , kiedy w obliczu tego problemu.

abt java & mvn

C:\mvn>echo %JAVA_HOME% 
C:\mvn>echo %JRE_HOME%
C:\mvn>echo %MAVEN_HOME% yields

wyjścia

C:\Program Files\Java\jdk1.7.0_51
C:\Program Files\Java\jre7
C:\apache-maven-3.0.4

3
... i na pewno masz gdzieś zainstalowaną Javę 8?
Makoto,

mam x86, 64 java 7 i nie java 8
rvd

3
W porządku. Dlaczego więc próbujesz skompilować kod Java 8 bez kompilatora Java 8?
Makoto,

@Makoto ty za przyjrzenie się mojemu problemowi z instalacją java 8 rozwiązał go .... ty człowieku :)
rvd

@Makoto W końcu zrozumiałem, o czym mówiliście: „W porządku. Dlaczego więc próbujesz skompilować kod Java 8 bez kompilatora Java 8?” więc właśnie zmieniłem w moim pliku pom.xml java.version> 1.8 </java.version> na java.version> 1.7 </java.version> i mogłem użyć kompilacji mvn również na java7
rvd

Odpowiedzi:


281

Ustawiono swoimi %JAVA_HOMEdo JDK 1.7, ale staramy się skompilować za pomocą 1.8. Zainstaluj jdk 1.8 i upewnij się, %JAVA_HOMEże tak jest, lub upuść docelową wersję do 1.7.

nieprawidłowe wydanie docelowe: 1.8

Wydanie docelowe odnosi się do wersji jdk.


7
jeszcze jednym możliwym rozwiązaniem w moim przypadku jest edycja pliku pom.xml java.version> 1.8 </java.version> na java.version> 1.7 </java.version>
rvd

1
Właśnie w tym miejscu maven szuka wersji java. W efekcie zmieniłeś wersję java na taką, którą zainstalowałeś na swoim% JAVA_HOME.
Zavior

2
Na moim Macu eksportuję JAVA_HOME =, /usr/libexec/java_home -v 1.8aby ustawić JAVA_HOME na właściwą lokalizację dla 1.8 JDK. Podaj swoją ulubioną wersję zamiast 1.8. (Istnieją znaki odwrotne po = i po 8).
bruce szalwinski

Tak, masz mnie. Zmieniłem to, aby skompilować inny starszy program, który wczoraj obsługuje tylko wersję 1.7: D Dzięki!
Davut Gürbüz

31

Wpisz wartość we wtyczce:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

Błąd został użyty:

<source>${java.version}</source>
<target>${java.version}</target>

2
W moim przypadku rozwiązaniem jest ustawienie zarówno źródła, jak i celu na 1,7
thinkhy

w jakim pliku mogę to znaleźć?
Yusril Maulidan Raji

21

W moim przypadku maven "Uruchom konfigurację" używał niewłaściwego JRE (1.7). Koniecznie sprawdź Run -> Run Configurations -> (Tab) JRE, aby być jakimś jdk1.8.x.


to prawda, więc następnym razem mamy następujące rzeczy do sprawdzenia, jeśli wystąpi ten błąd: JAVA_HOME, BUILD_Configuration, RUN_Configuration
Farhan

13

Problem został rozwiązany, ponieważ miałem JDK wskazujący na 1.7, a JRE na 1.8. Sprawdź w wierszu poleceń moje wpisywanie

java -version

i

javac -version.

Obie powinny być takie same.  


5

Oto jak rozwiązałem swój problem w przypadku zaćmienia:

  1. Preferencje -> Kompilator -> Poziom kompilatora kompilatora (Zmień na 1.8) wprowadź opis obrazu tutaj

  2. Perferences -> Installed JREs -> wybierz JAVA SE 8 1.8 wprowadź opis obrazu tutaj

  3. Przebuduj przez mavena, używając Run as maven build.

Nie powinno już pokazywać błędu nieprawidłowego celu.
Uwaga: nie musiałem ustawiać ani zmieniać żadnych innych zmiennych w moim terminalu. Mam nadzieję że to pomoże.


2

Umieszczenie tego w swoim .profile dynamicznie zajmie się Twoim $JAVA_HOME

export JAVA_HOME=$(/usr/libexec/java_home)

Następnie zamknij powłokę, otwórz nową i przetestuj za pomocą

echo $JAVA_HOME

Powinien wyświetlić coś w stylu

/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

Jeśli nie , usuń wszelkie inne przypisania JAVA_HOME ze swoich skryptów startowych. Pamiętaj, że te skrypty startowe zaczynają się od a, .więc są ukryte i nie zostaną uwzględnione podczas używania *symboli wieloznacznych, np. Jeśli chcesz grepować wszystkie pliki z katalogu domowego, musisz:

grep -s JAVA_HOME ~/.* --exclude=.bash_history

1

Problem, z którym się zmagałem, polegał na tym, że mogłem stworzyć kompilację maven z wiersza poleceń, ale nie z Eclipse. To, co zadziałało w przypadku zaćmienia, to fakt, że zmieniłem konfigurację uruchamiania, aby wskazywała folder JRE w JDK, zamiast zostawiać go w Folder JDK tylko zgodnie ze standardem.To rozwiązanie może również działać dla Ciebie, ale spróbuj tego wtedy i tylko wtedy, gdy wszystkie ścieżki Java są poprawne, java i javac wyświetlają tę samą wersję, co obecna w celu pom.xml.


To był mój problem i rozwiązanie.
Skychan

1

Napotkałem ten problem podczas wdrażania na Dokku, z jakiegoś powodu wybierałem JDK 1.7

Utworzenie system.propertiespliku i ustawienie java.runtime.version=1.8rozwiązało problem. Dokku używa teraz Javy w wersji 8. Wybór JDK na Heroku

Nigdy wcześniej nie musiałem tego robić ...


Podpowiedź nadal działa. Musiałem dużo szukać, żeby zmienić wersję Javy w Dokku na 11. Dziękuję bardzo.
Mister Vanderbilt

1

Jak wspomniała Camila Macedo - musisz wyraźnie wskazać wersję java dla wtyczki kompilatora. W przypadku butów wiosennych możesz to zrobić za pomocą następnej właściwości:

  <properties>
    <java.version>1.8</java.version>
    <maven.compiler.release>8</maven.compiler.release>
  </properties>

Tak, ustawienie maven.compiler.releasenaprawiło to w moim projekcie Mavena.
Cortex

1

Używając IntelliJ musiałem tylko zainstalować kolejną (wyższą) wersję JDK. Po ponownym uruchomieniu IDE wszystko działało, a nawet wszystkie zależności zostały rozwiązane.


1
Ponowne uruchomienie intelliJ było dla mnie kluczem. Zaktualizowałem zmienną środowiskową JAVA_HOME, aby wskazywała na inną wersję Java, ale wygląda na to, że zmienna systemowa nie jest odświeżana w istniejącej sesji CMD. Być może wystarczyłoby po prostu utworzyć nową sesję terminala.
Ubeogesh

0

To pytanie nie dotyczyło Dockera, ale otrzymałem ten sam błąd, gdy miałem plik pom.xml, który był przeznaczony dla 1,9 ...

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.9</maven.compiler.source>
  <maven.compiler.target>1.9</maven.compiler.target>
</properties>

... ale potem próbował przeprowadzić testy na kontenerze Dockera, określając sam „maven”.

docker run -t --rm -v m2_repository:/root/.m2/repository -v $(pwd):/work -w /work maven mvn -e test

W moim przypadku rozwiązaniem było ustawienie dokładnej wersji, której potrzebowałem.

docker run -t --rm -v m2_repository:/root/.m2/repository -v $(pwd):/work -w /work maven:3.5.2-jdk-9 mvn test

(Możesz dowiedzieć się więcej tutaj .)


0

Na komputerze z systemem Windows możesz tymczasowo ustawić wersję Java.
Na przykład, aby zmienić wersję na Java 8, uruchom to polecenie na cmd:

set JAVA_HOME=C:\\...\jdk1.8.0_65

0

Wykonaj aktualizację Force Maven, która przyniesie kompatybilne wersje 1.8 Jar, a następnie podczas budowania zaktualizuj wersje JRE w środowisku Execute do 1.8 z Run Configurations i naciśnij RUN


0

Jeśli używasz Eclipse IDE, przejdź do menu Okno i wybierz preferencje, a tam wyszukujesz zainstalowane JRE i wybierasz JRE, którego potrzebujesz do zbudowania projektu


-4

To, co zadziałało w moim przypadku, to:

Otworzyłem pom.xmli wymieniłem jedną z wtyczek jak poniżej.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

Zanim zredagowałem znaczniki źródłowe i docelowe 1.8, zmieniłem to na 1.7i zadziałało.


Czy rozumiesz zmianę, którą zrobiłeś, czy po prostu dokonałeś zmiany mając nadzieję na najlepsze?
Popeye

Obie. Rozumiem, że projekt działa teraz na Javie w wersji 1.7. Zrobiłem to, mając nadzieję, że to zadziała.
VIJAYKUMAR REDDY ALAVALA
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.