O que faz com que o projeto Maven importado no Eclipse use o Java 1.5 em vez do Java 1.6 por padrão e como posso garantir que isso não ocorra?

Eu importei um projeto do Maven e ele usou o Java 1.5, mesmo que eu tenha configurado o 1.6 como o padrão do Eclipse Preferences->Java->Installed JREs .

Quando mudei o projeto Maven para usar o 1.6 JRE, ainda restavam os erros de compilation de quando o projeto estava usando o Java 1.5 (descrevi esses erros de compilation anteriormente: Eu tenho erros de compilation com o m2eclipse mas não com o maven2 na linha de comando – meu m2eclipse está desconfigurado? )

Vou excluir o projeto e tentar novamente, mas quero garantir que, desta vez, ele use o Java 1.6 desde o início para ver se isso elimina os problemas de compilation.

Como faço para garantir que o projeto use o Java 1.6 quando eu importá-lo?

O plugin m2eclipse não usa os padrões do Eclipse, o plugin m2eclipse deriva as configurações do POM. Portanto, se você quiser que um projeto Maven seja configurado para usar as configurações do Java 1.6 quando importado no Eclipse, configure o maven-compiler-plugin apropriadamente, como já sugeri:

  org.apache.maven.plugins maven-compiler-plugin 2.1  1.6 1.6   

Se o seu projeto já foi importado, atualize a configuração do projeto ( clique com o botão direito do mouse no projeto e, em seguida, clique em Maven V Update Project Configuration ).

      org.apache.maven.plugins maven-compiler-plugin 3.2  1.8 1.8      

Eu queria adicionar algo à resposta já fornecida. maven-compiler-plugin por padrão irá compilar seu projeto usando o Java 1.5, que é onde o m2e obtém suas informações.

É por isso que você tem que declarar explicitamente o plugin do compilador-maven em seu projeto com algo diferente de 1.5. Seu pom.xml efetivo implicitamente usará o conjunto padrão no pom.xml maven-compiler-plugin .

Eu adicionei isso ao meu pom.xml abaixo da descrição do projeto e funcionou:

  1.6 1.6  

Seu JRE provavelmente foi definido na configuração de execução. Siga estas etapas no Eclipse para alterar o JRE de construção.

1) Clique com o botão direito do mouse no projeto e selecione Run As > Run Configurations

2) Na janela Run Configurations, selecione a configuração de construção do seu projeto no painel esquerdo. À direita, você verá várias guias: Main, JRE, Refresh, Source, …

3) Clique na guia JRE, você deve ver algo parecido com isto

insira a descrição da imagem aqui

4) Por padrão, o JRE padrão de trabalho (o JRE selecionado como padrão em Preferências-> Java-> JREs instalados ) será usado. Se você quiser usar outro JRE instalado, marque a checkbox de seleção Alternate JRE e selecione seu JRE preferido no menu suspenso.

Aqui está a causa raiz do java 1.5:

Observe também que, atualmente, a configuração de origem padrão é 1,5 e a configuração de destino padrão é 1,5, independentemente do JDK com o qual o Maven está sendo executado. Se você quiser alterar esses padrões, deverá definir a origem e o destino.

Referência: Apache Mavem Compiler Plugin

A seguir estão os detalhes:

Pom.xml simples

    4.0.0 com.pluralsight spring_sample 1.0-SNAPSHOT  

O seguinte plugin é retirado de uma versão expandida do POM (Effective POM),

Isso pode ser obtido por este comando a partir da linha de comando C:\mvn help:effective-pom Acabei de colocar aqui um pequeno trecho em vez de um pom inteiro.

   maven-compiler-plugin 3.1   default-compile compile  compile    default-testCompile test-compile  testCompile     

Mesmo aqui você não vê onde está a versão java definida, vamos cavar mais …

Baixe o plugin, Apache Maven Compiler Plugin »3.1 como está disponível no jar e abra-o em qualquer ferramenta de compactação de arquivos como 7-zip

Atravesse o flask e encontre

plugin.xml

arquivo dentro da pasta

maven-compiler-plugin-3.1.jar \ META-INF \ maven \

Agora você verá a seguinte seção no arquivo,

       ${maven.compiler.compilerId} ${maven.compiler.compilerReuseStrategy} ${maven.compiler.compilerVersion} ${maven.compiler.debug} ${maven.compiler.debuglevel} ${encoding} ${maven.compiler.executable} ${maven.compiler.failOnError} ${maven.compiler.forceJavacCompilerUse} ${maven.compiler.fork}  ${maven.compiler.maxmem} ${maven.compiler.meminitial} ${mojoExecution} ${maven.compiler.optimize}  ${maven.compiler.showDeprecation} ${maven.compiler.showWarnings} ${maven.test.skip} ${maven.compiler.skipMultiThreadWarning} ${maven.compiler.source} ${lastModGranularityMs} ${maven.compiler.target} ${maven.compiler.testSource} ${maven.compiler.testTarget} ${maven.compiler.useIncrementalCompilation} ${maven.compiler.verbose}    

Olhe para o código acima e descubra as duas linhas seguintes

  ${maven.compiler.source} ${maven.compiler.target} 

Boa sorte.

Configurações específicas do projeto

Um outro lugar onde isso pode dar errado está nas configurações específicas do projeto, no Eclipse.

  1. propriedades do projeto: clique no seu projeto e em um dos seguintes:

    • Alt + Enter
    • Menu> Projeto> Propriedades
    • clique com o botão direito do mouse em seu projeto> propriedades do projeto (último item no menu)
  2. clique em “Java Compiler”

  3. Desmarque a opção “Ativar configurações específicas do projeto” (ou altere-as todas manualmente).

Por causa dos requisitos do cliente, nós os habilitamos a manter nossos projetos na versão 1.6. Quando foi necessário atualizar para o 1.7, tivemos dificuldades porque precisávamos mudar a versão do java em todo o lugar:

  • projeto POM
  • Padrão do Eclipse Workspace
  • configurações específicas do projeto
  • executando máquina virtual (1.6 foi usado para tudo)

Mais uma razão possível se você estiver usando o Tycho e o Maven para construir pacotes configuráveis, que tem um ambiente de execução incorreto ( Bundle-RequiredExecutionEnvironment ) no arquivo de manifest.mf ( manifest.mf ) definido. Por exemplo:

 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Engine Plug-in Bundle-SymbolicName: com.foo.bar Bundle-Version: 4.6.5.qualifier Bundle-Activator: com.foo.bar.Activator Bundle-Vendor: Foobar Technologies Ltd. Require-Bundle: org.eclipse.core.runtime, org.jdom;bundle-version="1.0.0", org.apache.commons.codec;bundle-version="1.3.0", bcprov-ext;bundle-version="1.47.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.5 Export-Package: ... ... Import-Package: ... ... 

No meu caso, tudo estava ok. Os plugins do compilador (como o maven e o tycho normais) foram definidos corretamente, mas o m2 gerou o nível de conformidade antigo devido ao manifesto. Eu pensei em compartilhar a experiência.

Descobri que o meu problema era alguém que cometeu o arquivo .project e .classpath que tinha referências ao Java1.5 como o JRE padrão.

      

Fechando o projeto, removendo os arquivos e, em seguida, reimportando como um projeto Maven, consegui definir corretamente o projeto para usar o espaço de trabalho JRE ou o jdk relevante, sem voltar a 1.5. Assim, evite verificar em seu SVN os arquivos .project e .classpath

Espero que isso ajude os outros.

Solução mais simples no Springboot

Vou te dar o mais simples se você usar o Springboot:

  1.8  

Em seguida, clique com o botão direito do mouse em seu projeto Eclipse: Maven> Update project> Atualizar configuração de projeto de pom.xml

Isso deveria fazer.