interrompa o IntelliJ IDEA para alternar o nível do idioma java toda vez que o pom for recarregado (ou altere o nível padrão do idioma do projeto)

145

Usando o IntelliJ 12, tenho um projeto java e uso o maven com um pom.xml. Meu projeto está usando java8, mas parece que o nível de idioma padrão do projeto foi definido como 6 durante a importação do projeto.

Posso alterar o nível de idioma para 8.0 (F4 -> Módulos -> Nível de idioma), porém, toda vez que edito meu pom.xml, o nível do projeto volta para "usar o nível de idioma do projeto", e preciso editar essas configurações novamente e novamente.

Há algo que eu preciso adicionar ao pom.xml para definir o nível de idioma padrão como 8.0?

Quentin
fonte
2
O seu pom especifica o nível de origem e destino na configuração do plug-in do compilador?
precisa
sim, origem e destino definidos para 1,8. No entanto, ele não foi especificado durante a importação do projeto.
Quentin
@Quentin Em tal situação, pode ser mais fácil reclinar o projeto em um novo local e deixar o IntelliJ importá-lo novamente.
Thorbjørn Ravn Andersen

Respostas:

174

De acordo com o comentário de Mark, aqui está como fazê-lo:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
vikingsteve
fonte
10
o plugin está presente no alvo pom, wuth 1.8, mas não muda nada :(
Quentin
2
Você tem a importação automática de seu maven pom ativada? Você verificou os pais (e avós), existem configurações 1.6 que possam estar em conflito?
vikingsteve
1
Na verdade, o projeto pai é definido com spring-boot-starter-parent-1.1.9.RELEASE.pom.xml e no pluginManagement o maven-compiler-plugin está definido como 1.6 ... Tentei substituir essas configurações sem êxito. Parece que o boot de primavera 1.2.RC não inclui mais o maven-compiler-plugin, vou tentar. - a importação automática está ativada.
Quentin
Ótimo, poderia ser por isso. Se você especificar a mesma versão do plug-in do compilador maven, poderá ser possível substituir as configurações de origem / destino. Talvez tente isso na raiz do seu projeto pom.xml.
vikingsteve
2
No meu caso, isso não funcionou. Eu tive que remover a configuração mencionada nesta resposta e, em vez disso, adicionar o seguinte:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
genonymous
99

Uma versão mais curta da resposta de vikingsteve é:

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
DieterDP
fonte
6
Um aborrecimento a menos!
Artur Cichosz #
4
Esta não era apenas uma versão curta, mas necessária no meu caso. A resposta de vikingsteve não funcionou para mim. Então eu removi essa configuração e usei essa.
genonymous 21/12
23

Eu acho que isso tem a ver com um conflito conceitual entre o plug-in do compilador Maven e a idéia do IntelliJ. Aparentemente, as versões mais recentes do plug-in do compilador têm um nível padrão de 1,5 (consulte http://maven.apache.org/plugins/maven-compiler-plugin/ ). Portanto, se o plug-in do compilador for usado em um projeto e o nível do compilador não estiver definido explicitamente no pom.xml, sempre que o POM for reprocessado, o nível voltará ao padrão.

Portanto, há um conflito conceitual que é ignorado pelo Intellij IDEA. O IDE ainda permite definir as configurações do projeto e do módulo, mas não fornece nenhum aviso ou feedback de que essa configuração é controlada pelo pom.xml. As soluções seriam permitir explicitamente substituir a configuração do plug-in do compilador POM (talvez não seja sensato porque o que acontece quando você usa o maven na linha de comando) ou desativar os controles no IDE quando essa configuração do POM estiver em vigor.

A solução no momento é definir o nível do compilador desejado no plug-in do pom, a reimportação, em vez de tentar defini-lo nas configurações do módulo.

Peter N. Steinmetz
fonte
1
Acordado. A falta de feedback de que as configurações no IDEA serão ignoradas e reimportadas do POM é muito confusa, especialmente ao usar um POM pai.
Gillfish
9

Estou atualizando um projeto do JDK 8 para o JDK 10+. Eu tinha as propriedades do compilador especificadas corretamente da seguinte maneira:

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

No entanto, o projeto Idea continuaria redefinindo o nível do idioma para 8.

Eventualmente, descobri que o processo de importação do Idea Maven estava usando o JDK 8 para importar o projeto que limitava o nível de idioma a <= 8.

Para corrigir , atualizei a propriedade 'JDK for importator' em Configurações -> Compilação, Execução, Implantação -> Ferramentas de compilação -> Maven -> Importação para usar o JDK 11.

insira a descrição da imagem aqui

danw
fonte
Resolvi meu problema. Parece que o IntelliJ atualizou seu JRE interno com os lançamentos posteriores (em torno de 2019.2). Muito difícil de rastrear ...
Hasan Aslam
8

Há duas maneiras de fazer isso: adicione uma delas no arquivo pom.xml:

Primeiro - Adicionar Propriedades

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

second- Add Plugin

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

Deixe-me saber se isso ajuda.

Anuj Teotia
fonte
Eu fiz ambos e o compilador ainda está sendo redefinido para 1.5 toda vez que tento executar a compilação mvn a partir do IntelliJ. No entanto, ele funciona bem quando executado a partir da linha de comando fora do IntelliJ.
usar o seguinte comando
1
no IntelliJ, lembre-se de reimportar as configurações do maven após a modificação. A solução funcionou para mim.
Pierluigi Vernetto
4

Nenhuma das soluções ajudou no meu caso. Eu não precisava especificar nenhuma versão Java no meu pom.xml.

Eu precisava abrir o <project-name>.imlarquivo e alterar a versão do JDK lá.

Original:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Atualizada:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Isso não faz nenhum sentido. Em nenhum momento eu especifiquei uma versão do JDK para Java 1.5.

Kleinfreund
fonte
Isso, por si só, resolveu o problema para mim no IntelliJ 2019.3, sem exigir que eu alterasse qualquer coisa nos meus pom's ou em qualquer outro lugar. Da mesma forma, nunca especifiquei o JDK 1.5 em nenhum lugar.
Michael Christoff
Exemplo: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León
1

Eu lutei bastante com esse problema, devido à criação de microsserviços com o Dropwizard. Eventualmente, descobri que minhas propriedades de construção estavam no arquivo pom errado (o serviço principal pom.xml).

Portanto, mesmo que os outros pacotes sejam mais parecidos com bibliotecas , não pude usar a sintaxe do Java 8.

Quando refatorei o plug-in de compilação no .pom.xmlarquivo "global" ", todos os contêineres filhos puderam usar a nova sintaxe.

Pode ajudar alguém com problemas em projetos com vários contêineres

user3677636
fonte
0

Para mim, a solução de atualização do POM (plugins mais propriedades) para a versão exigida do compilador Java (1_7 no meu caso) funcionou. No entanto, como o arquivo .iml para cada projeto foi gerado com o pom original (com a versão do compilador padrão de 1_5, conforme explicado por alguém acima), possui uma versão do JDK de 1_5, isso ainda substitui a versão do pom.

Excluí a pasta .idea manualmente e importei o módulo para o IntelliJ com uma reimportação do pom atualizado. Quando reimportei o módulo do POM atualizado, pude ver que os arquivos iml tinham a versão atualizada do JDK (1_7 no meu caso).

Shirish Sakhare
fonte