IntelliJ IDEA 13 używa języka Java 1.5 pomimo ustawienia na 1.7

147

Pomimo określenia JDK 1.7 we wszystkich ustawieniach projektu (w tym w File -> Project Structure -> Project :: Project SDK), IntelliJ 13podczas próby skompilowania prostego kodu Java 7, który korzysta z operatora diamentu, generowany jest następujący błąd :

java: diamond operator is not supported in -source 1.5
(use -source 7 or higher to enable diamond operator)

Czy jest jakieś inne miejsce w konfiguracji, w którym oczekiwana -source 7opcja powinna być włączona?

PNS
źródło
8
Próbowałem: File -> Project Structure -> Project :: Project language levelzmienić na Diamonds, ARM, multi-catch etc?
Adam Shakhabov
39
Tak. Jak się okazuje, jest jeszcze jedna opcja w Plik -> Struktura projektu -> Moduły :: Źródła (obok Ścieżki i zależności), która ma opcję „Poziom języka”, którą również należy ustawić poprawnie. Dziękuję wszystkim za komentarze i odpowiedzi! :-)
PNS
33
Są 3 miejsca, które wymagają aktualizacji. (1) Plik -> Ustawienia (Ctrl + alt + s dla skrótu), a następnie „Kompiluj, uruchamiaj, wdrażaj”> Kompilator> Kompilator Java i zmień „Docelową wersję kodu bajtowego” na żądaną wersję Javy. (2 i 3) Drugie miejsce znajduje się w menu Plik> Struktura projektu (Ctrl + Alt + Shift + S)> „Ustawienia projektu”> „Projekt” zmień pakiet SDK projektu, aby wskazywał odpowiednią wersję języka Java, i ustaw poziom języka projektu na poprawna wersja. Asystent kodu zmienia tylko poziom języka, co niestety powoduje uciążliwość dla nowych projektów.
8bitme
2
Co jeśli mam w projekcie 200 modułów, czy muszę spędzać cały dzień na ich ponownym wybieraniu?

Odpowiedzi:

114

Jeśli nic z tego nie pomaga (w moim przypadku), możesz ustawić to w swoim pom.xml, na przykład:

<properties>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
</properties>

Jak wspomniał ten fajny facet: https://stackoverflow.com/a/25888116/1643465

Djordje Ivanovic
źródło
4
dobry pomysł, ale nie wprowadzaj twardych nadpisań do wspólnego projektu, chyba że chcesz wysadzić wszystkie ustawienia swoich kolegów z drużyny
quaintm
8
To rozwiązało problem, dzięki! Jak to może „zepsuć ustawienia członków drużyny”? Jeśli celem projektu jest 1,7, to jest to 1,7. To nie jest tak, że każdy członek drużyny ma inne środowisko docelowe.
isapir
1
Świetnie, mój jest projekt Maven.
huuthang
1
W przypadku nowych projektów maven to ustawienie można dodać w domyślnych projektach maven. Użyj preferencji | Redaktor | Szablony plików i kodów | Maven | Maven Projects.xml <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> InteliJ Support Forum
pRmdk
To zadziałało dla mnie. Ale dopiero po ponownym uruchomieniu IntelliJ próbowałem po prostu odbudować sam projekt i to nie zadziałało.
Metin Dagcilar
155

Sprawdź poziomy językowe swojego projektu / modułu (Struktura projektu | Projekt; Struktura projektu | Moduły | nazwa modułu | Źródła). Możesz również rzucić okiem na Ustawienia | Kompilator | Kompilator Java | Wersja kodu bajtowego na moduł.

Ustaw również to:

Plik -> Struktura projektu -> Moduły :: Źródła (obok Ścieżki i zależności) i ma opcję „Poziom języka”, która również musi być poprawnie ustawiona.

Peter Gromov
źródło
2
I sprawdź, czy Additional command line parametersw Java Compilerustawieniach jest puste.
NeplatnyUdaj
2
Uwaga: Trzecia rzecz (Plik -> Struktura projektu -> Moduły :: Źródła) rozwiązała to dla mnie.
Peter,
Pomocne zrzuty ekranu tego procesu znajdują się pod następującą odpowiedzią: stackoverflow.com/a/21747329/1146608
Patrick M
1
Jeśli używasz Mavena, musisz zmodyfikować pom: stackoverflow.com/questions/27037657/…
Benj,
11
+1 za poziom języka. Nie powinno być TAK WIELE miejsc do ustawienia i ponownego ustawienia i ponownego ustawienia tego samego # $% ^ rzeczy!
G. Ann - SonarSource Team
52

[Dla IntelliJ IDEA 2016.2]

Chciałbym rozszerzyć część odpowiedzi Petera Gromova o aktualny zrzut ekranu. W szczególności ta konkretna część:

Możesz również rzucić okiem na Ustawienia | Kompilator | Kompilator Java | Wersja kodu bajtowego na moduł.

Uważam, że (przynajmniej w 2016.2): ​​sprawdzenie różnych zatwierdzeń w gitresetuje je do 1.5.

Wersja kodu bajtowego na moduł

Birchlabs
źródło
5
Zrezygnowałem z utrzymywania tych na prawidłowych numerach (z jakiegoś powodu się zmieniają - zakładam, kiedy to robię git checkout). Okazało się, że udało mi się bezpiecznie usunąć wpisy z tej listy; moduł wraca do używania „Wersja kodu bajtowego projektu”.
Birchlabs
Te liczby również nieoczekiwanie wracają do 1,5 dla mnie. Tylko sztywne kodowanie wersji źródłowej i docelowej kompilatora w pliku pom.xml działa spójnie.
sheldonkreger
Zwróć uwagę na ustawienie „Wersja kodu bajtowego projektu” u góry tego zrzutu ekranu, a także na podświetloną „Docelową wersję kodu bajtowego”.
Basil Bourque,
@Birchlabs Dziękuję, myślę, że to właściwa odpowiedź.
chrips
1
To było jedyne rozwiązanie, które rozwiązało problem dla mnie, IntelliJ IDEA 2019.1
João Rocha da Silva
19

Alternatywnie możesz zastosować wtyczkę maven-compiler-plugin z odpowiednią wersją java, dodając to do swojego pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
OlgaMaciaszek
źródło
To zadziałało po wyjściu z projektu, usunięciu folderu .idea i pliku .iml, z których wszystkie są odtwarzane podczas ponownego otwierania projektu.
Andrew,
1
Naciśnięcie przycisku „Odśwież Maven” w pomyśle powinno działać.
OlgaMaciaszek
Aby rozwiązanie działało, wymagane było odświeżenie @OlgaMaciaszek. Dzięki!
payne
14

Próbowałem wprowadzić zmiany w Intellij IDEA, jak poniżej:

1.

File >> Settings >> Build, Execution, Deployment >> Compiler >> Java Compiler >> project bytecode version: 1.8 >> Per-module bytecode version: 1.8

2.

File >> Project Structure >> Project Settings >> Project >> SDK : 1.8, Project Language : 8 - Lambdas
File >> Project Structure >> Project Settings >> Modules >> abc : Language level: 8 - Lambdas

ale nic nie działało, przywrócił wersje do java 1.5, gdy tylko go zapisałem.

Jednak dodanie poniższych wierszy do katalogu głównego (na poziomie projektu) pom.xml pomogło mi rozwiązać powyższy problem: (obie opcje działały dla mnie)

Opcja 1:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

Opcja 2:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
Amit Kaneria
źródło
10

Plik-> Struktura projektu-> Ustawienia projektu-> Projekt-> Poziom języka projektu

Plik-> Struktura projektu-> Ustawienia projektu-> Moduły-> Poziom językowy

Zmień poziom za pomocą menu rozwijanego

ketankk
źródło
4

W linii poleceń (terminal Unix) Przejdź do głównego folderu projektu i zrób to

find . -type f -name '*.iml' -exec sed -i '' s/JDK_1_5/JDK_1_8/g {} +

Spowoduje to zmianę właściwości poziomu języka we wszystkich plikach .iml projektu z java 1.5 na java 1.8.

Saideep Sambaraju
źródło
Jeszcze nie jestem pewien, ale może być konieczne zastąpienie wersji JDK w compiler.xmlkatalogu głównym projektu (IntelliJ 2017.2):sed 's/target="1.5"/target="1.8"/g' .idea/compiler.xml
Oleksandr Volynets
compiler.xml może być specyficzny dla twojego projektu. To polecenie dotyczy tylko plików * .iml, które są potrzebne tylko intellij. Może być konieczne dostosowanie ustawień językowych w maven pom.xml lub w twoim przypadku compiler.xml niezależnie od IDE.
Saideep Sambaraju
1
@SaideepSambaraju compiler.xml jest obecny w każdym projekcie do zbudowania, który widziałem. Z tego, co widzę, ten plik jest modelem Ustawienia-> kompilator (linux) Preferencje-> Kompilator (MacOS). Możesz go użyć do zmiany wersji docelowej za pomocą skryptu, jak powiedział Oleksandr, lub ręcznie bez interfejsu użytkownika.
Sergey Sargsyan
@SergeySargsyan - właśnie to sprawdziłem, znajduje się w folderze .idea, którego nie mogłem znaleźć podczas wyszukiwania. Dzięki za wskazanie tego.
Saideep Sambaraju
2

Najpierw musisz zmienić "wersję kodu bajtowego projektu" pod File > Settings,Compiler > Java Compiler

Po drugie, wykonaj pełną przebudowę.

Elliott Frisch
źródło
2

Mam ten sam problem, ale w innej sytuacji. Mogę bez problemu kompilować z maven w wierszu poleceń (mvn clean install ), ale w Intellij zawsze otrzymywałem "java: diamond operator is not supported in -source 1.5"błąd kompilacji, mimo że ustawiłem wtyczkę maven-compiler-plugin z java 1.8 w pom.xml.

Okazało się, że mam ustawienie zdalnego repozytorium w pliku settings.xml mojego mavena, od którego zależy projekt, ale Intellij używa własnego mavena, który nie ma tego samego ustawienia z moim lokalnym ekspertem.

Więc moim rozwiązaniem była zmiana ustawienia maven Intellij ( Settings -> Build, execution, Deployment -> Maven -> Maven home directory) na użycie lokalnego mavena.

jordom
źródło
2

W IntelliJ Community Edition 2019.02 zmiana następujących ustawień zadziałała

  1. Zaktualizuj plik-> Struktura projektu-> Ustawienia projektu-> Projekt-> Poziom języka projektu do Java 11 (zaktualizuj do wersji Java, której chcesz używać w swoim projekcie), używając listy rozwijanej.

  2. Zaktualizuj plik-> Struktura projektu-> Ustawienia projektu-> Moduły-> Poziom języka

  3. Zaktualizuj plik -> Ustawienia -> Kompiluj, uruchamiaj, wdrażaj -> Kompilator -> Kompilator Java -> Wersja kodu bajtowego projektu do java 11.

  4. Zaktualizuj wersję docelową dla wszystkich wpisów w Plik-> Ustawienia-> Kompilacja, wykonanie, Wdrożenie -> Kompilator -> Kompilator Java -> Wersja kodu bajtowego modułu.

Khyati Elhance
źródło
0

W IntelliJ 2017 pracowała dla mnie następująca nieruchomość

  <properties>
        <java.version>1.8</java.version>       
  </properties>
H.Rabiee
źródło
Działa to tylko wtedy, gdy używasz projektu nadrzędnego, takiego jak Spring Boot.
wggn
0

Jeszcze jedna rzecz, która może być przyczyną tego jest posiadanie nieprawidłowy versionz <parent>projektem.

W moim przypadku wskazywał na nieistniejący projekt iz jakiegoś powodu IntelliJ obniżył wersję w ustawieniach do 1.5, a później, kiedy go naprawiłem, nadal interpretował wersję kodu docelowego jako 5 (pomimo ustawienia go na 11).

syntagma
źródło