O IntelliJ IDEA 13 usa Java 1.5, apesar de ter definido para 1,7

147

Apesar de especificar o JDK 1.7 em todas as configurações do projeto (inclusive em File -> Project Structure -> Project :: Project SDK), o seguinte erro é produzido IntelliJ 13ao tentar compilar algum código Java 7 simples que usa o operador diamond:

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

Existe algum outro lugar na configuração em que a -source 7opção esperada deve ser ativada?

PNS
fonte
8
Tentei: File -> Project Structure -> Project :: Project language levelmudar para Diamonds, ARM, multi-catch etc?
Adam Shakhabov
39
Sim. Como se vê, existe ainda outra opção em Arquivo -> Estrutura do projeto -> Módulos :: Fontes (ao lado de Caminhos e dependências) e que possui uma opção "Nível de idioma" que também precisa ser definida corretamente. Obrigado a todos pelos comentários e respostas! :-)
PNS
33
Existem 3 locais que precisam ser atualizados. (1) Arquivo -> Configurações (Ctrl + alt + s para o atalho), depois "Build, Execution, Deployment"> Compiler> Java Compiler e altere a "Target bytecode version" para a versão Java desejada. (2 e 3) O outro local está em Arquivo> Estrutura do projeto (Ctrl + Alt + Shift + S)> "Configurações do projeto"> "Projeto" altere o SDK do projeto para apontar para a versão apropriada do Java e defina o nível de idioma do projeto como a versão correta. O assistente de código altera apenas o nível do idioma para você, infelizmente, tornando isso um aborrecimento para novos projetos.
8bitme
2
E se eu tiver 200 módulos no meu projeto, tenho que passar o dia todo reclocando-os?

Respostas:

114

Se nada disso ajudar (no meu caso), você pode configurá-lo no seu pom.xml, assim:

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

Como esse cara legal mencionado aqui: https://stackoverflow.com/a/25888116/1643465

Djordje Ivanovic
fonte
4
boa idéia, mas não comprometer suas substituições difíceis de um projeto compartilhado, a menos que você quer apagar as configurações de todos os seus companheiros de equipe
quaintm
8
Isso resolveu o problema para mim, obrigado! Como ele pode "explodir as configurações dos companheiros de equipe"? Se o objetivo do projeto é 1,7, então é 1,7. Não é como se cada colega de equipe tivesse um ambiente-alvo diferente.
Isapir 28/08/16
1
Ótimo, o meu é um projeto maven.
precisa saber é o seguinte
1
Para novos projetos maven, essa configuração pode ser adicionada nos projetos padrão maven. Use Preferências | Editor Modelos de arquivo e código | Maven Maven Projects.xml <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> Fórum de suporte InteliJ
pRmdk
Isso funcionou para mim. Mas somente quando reiniciei o IntelliJ, tentei apenas reconstruir o projeto sozinho e isso não funcionou.
Metin Dagcilar
155

Verifique os níveis de idioma do seu projeto / módulo (Estrutura do projeto | Projeto; Estrutura do projeto | Módulos | nome do módulo | Fontes). Você também pode querer dar uma olhada em Configurações | Compilador Compilador Java | Versão de bytecode por módulo.

Defina também este:

Arquivo -> Estrutura do projeto -> Módulos :: Fontes (ao lado de Caminhos e dependências) e que possui uma opção "Nível de idioma" que também precisa ser definida corretamente.

Peter Gromov
fonte
2
E verifique se Additional command line parametersem Java Compilerconfigurações está em branco.
precisa saber é o seguinte
2
Nota: A terceira coisa (Arquivo -> Estrutura do projeto -> Módulos :: Fontes) é o que resolveu isso para mim.
Peter
Capturas de tela úteis deste processo nesta resposta: stackoverflow.com/a/21747329/1146608 #
Patrick M
1
Se estiver usando Maven, precisa modificar pom: stackoverflow.com/questions/27037657/...
Benj
11
+1 para o nível do idioma. Não deve haver MUITOS lugares para definir e redefinir e redefinir a mesma coisa # $% ^!
G. Ann - Equipe SonarSource
52

[Para IntelliJ IDEA 2016.2]

Gostaria de expandir parte da resposta de Peter Gromov com uma captura de tela atualizada. Especificamente esta parte específica:

Você também pode querer dar uma olhada em Configurações | Compilador Compilador Java | Versão de bytecode por módulo.

Acredito que (pelo menos em 2016.2): ​​verificar diferentes commits em gitredefine-os para 1,5.

Versão de bytecode por módulo

Birchlabs
fonte
5
Desisti de mantê-los nos números corretos (por alguma razão eles mudam - presumo que sim git checkout). Eu descobri que era capaz de excluir com segurança as entradas desta lista; o módulo volta a usar "Versão do bytecode do projeto".
precisa saber é o seguinte
Esses números também voltam a 1,5 para mim inesperadamente. Somente a codificação embutida das versões de origem e destino do compilador no arquivo pom.xml funciona de maneira consistente.
Sheldonkreger 25/05
Observe a configuração "Versão do bytecode do projeto" na parte superior desta captura de tela, bem como a "Versão do bytecode de destino" destacada.
Basil Bourque
@ Birchlabs Obrigado, acho que esta é a resposta certa.
chrips
1
Esta foi a única solução que corrigiu o problema para mim, o IntelliJ IDEA 2019.1
João Rocha da Silva
19

Como alternativa, você pode aplicar o maven-compiler-plugin com a versão java apropriada, adicionando-o ao seu 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
fonte
Isso funcionou após a saída do projeto, excluindo a pasta .idea e o arquivo .iml, todos recriados ao abrir o projeto novamente.
Andrew
1
Pressionar o botão "Atualizar Maven" na idéia deve funcionar.
OlgaMaciaszek
A atualização do @OlgaMaciaszek foi necessária para que a solução funcionasse. Obrigado!
Payne
14

Tentei fazer alterações no Intellij IDEA como abaixo:

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

mas nada funcionou, ele reverteu as versões para o java 1.5 assim que eu o salvei.

No entanto, adicionar linhas abaixo à raiz (nível do projeto) pom.xml me ajudou a resolver o problema acima: (ambas as opções funcionaram para mim)

Opção 1:

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

Opção 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
fonte
10

Arquivo-> Estrutura do Projeto-> Configurações do Projeto-> Projeto-> Nível do Idioma do Projeto

Arquivo-> Estrutura do Projeto-> Configurações do Projeto-> Módulos-> Nível do Idioma

Alterar nível usando o menu suspenso

ketankk
fonte
4

Na sua linha de comando (terminal Unix) Vá para a pasta raiz do projeto e faça isso

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

Isso mudará a propriedade no nível do idioma em todos os arquivos .iml do seu projeto, de java 1.5 para java 1.8.

Saideep Sambaraju
fonte
Ainda não tenho certeza, mas pode ser necessário substituir também a versão do JDK na compiler.xmlraiz do projeto (IntelliJ 2017.2):sed 's/target="1.5"/target="1.8"/g' .idea/compiler.xml
Oleksandr Volynets
O compiler.xml pode ser específico para o seu projeto. Este comando tem como alvo apenas arquivos * .iml que são necessários apenas por intellij. Pode ser necessário ajustar as configurações de idioma no seu maven pom.xml ou no seu caso, compiler.xml, independentemente do IDE.
Saideep Sambaraju
1
O @SaideepSambaraju compiler.xml está presente em qualquer projeto de ideia que possa ser construído. Pelo que vejo, esse arquivo é o modelo das configurações-> compilador (linux) Preferências-> compilador (MacOS). Você pode usá-lo para alterar a versão de destino por script, como Oleksandr disse ou manualmente, sem interface do usuário.
Sergey Sargsyan
@SergeySargsyan - Acabei de verificar, está na pasta .idea que não consegui encontrar pesquisando. Obrigado por apontar isso.
Saideep Sambaraju
2

Primeiro, você precisa alterar a "versão do bytecode do projeto" em File > Settings,Compiler > Java Compiler

Segundo, faça uma reconstrução completa.

Elliott Frisch
fonte
2

Eu tenho o mesmo problema, mas com situação diferente. Posso compilar sem problemas com o maven na linha de comando ( mvn clean install), mas no Intellij sempre recebi um "java: diamond operator is not supported in -source 1.5"erro de compilação, apesar de ter definido o maven-compiler-plugin com o java 1.8 no pom.xml.

Acontece que eu tenho uma configuração de repositório remoto no settings.xml do meu maven, do qual o projeto depende, mas Intellij usa seu próprio maven, que não tem a mesma configuração do maven local.

Portanto, minha solução foi alterar a configuração do maven do Intellij ( Settings -> Build, execution, Deployment -> Maven -> Maven home directory) para usar o maven local.

jordom
fonte
2

No IntelliJ Community Edition 2019.02, a alteração das seguintes configurações funcionou para mim

  1. Atualize Arquivo-> Estrutura do projeto-> Configurações do projeto-> Projeto-> Nível da linguagem do projeto para Java 11 (atualize para a versão java que você deseja usar no seu projeto) usando o menu suspenso.

  2. Atualizar Arquivo-> Estrutura do Projeto-> Configurações do Projeto-> Módulos-> Nível do Idioma

  3. Atualize Arquivo-> Configurações-> Compilação, Execução, Implantação -> Compilador -> Compilador Java-> Versão do ByteCode do Projeto para java 11.

  4. Atualize a versão de destino para todas as entradas em Arquivo-> Configurações-> Compilar, Execução, Implantação -> Compilador -> Compilador Java-> Por módulo Versão do código de bytes.

Khyati Elhance
fonte
0

Eu tinha a seguinte propriedade trabalhando para mim no IntelliJ 2017

  <properties>
        <java.version>1.8</java.version>       
  </properties>
H.Rabiee
fonte
Isso só funciona se você usar um projeto pai como o de inicialização por primavera.
wggn
0

Mais uma coisa que pode causar isso é ter incorreto versionno <parent>projeto.

No meu caso, ele estava apontando para um projeto inexistente e, por algum motivo, o IntelliJ rebaixou a versão nas configurações para 1.5 e mais tarde, quando eu o corrigi, ainda estava interpretando a versão do código de destino como 5 (apesar de defini-la como 11).

sintagma
fonte