Como obtenho o Eclipse para usar uma versão de compilador diferente para Java?

Parece que essa deve ser uma tarefa simples, com as opções no menu Preferences para diferentes JREs e a capacidade de definir diferentes caminhos de compilation e compilation por projeto. No entanto, também parece simplesmente não funcionar.

Por exemplo, tenho o meu JAVA_HOME definido como um jre para o Java 1.6. Ainda não está claro para mim como o Eclipse usa isso, mas parece estar sendo padronizado e não tomando as substituições do projeto. Também instalei o Java 1.5 e incluí um JRE para isso no eclipse na seção Java-> Installed JREs.

No meu projeto, configurei o nível de conformidade do compilador para 1,5. No caminho de construção do projeto, adicionei a Biblioteca de Sistemas para o Java 1.5 JRE. No entanto, estou recebendo erros de compilation para uma class que implementa PreparedStatement para não implementar methods abstratos que existem apenas no Java 1.6 PreparedStatement. Especificamente, os methods

setAsciiStream(int, InputStream, long) and setAsciiStream(int, InputStream) 

Estranhamente, funcionou quando estávamos compilando o Java 1.4, para o qual foi originalmente escrito. Adicionamos os JREs para Java 1.4 e referenciamos essa biblioteca do sistema no projeto e definimos o nível do compilador do projeto como 1.4, e ele funciona bem. Mas quando eu faço as mesmas alterações para tentar apontar para o Java 1.5, ele usa 1.6.

Alguma idéia por quê?

Na barra de menu: Projeto -> Propriedades -> Compilador Java

Ativar configurações específicas do projeto (marcada) Desmarque a opção “usar Conformidade do ambiente de execução” …. Selecione o “nível de conformidade do compilador” desejado

Isso permitirá que você compile o código “1.5” usando um JDK “1.6”.

Se você quiser usar de forma ativa um 1.5 JDK para produzir um código compatível com “1.5”, instale um 1.5 JDK adequado e diga ao eclipse onde ele está instalado via:

Janela -> preferências -> JREs instalados

E depois volte para o seu projeto

Projeto -> propriedades -> caminho de compilation Java -> bibliotecas

remova as bibliotecas do sistema 1.6 e: add library … -> Biblioteca do Sistema JRE -> Alternate JRE -> O JRE que você deseja.

Verifique se o JRE correto está no caminho de criação do projeto, salve tudo e divirta-se!

O Eclipse usa seu próprio compilador interno que pode compilar para várias versões do Java.

Da Ajuda do Eclipse> Guia do Usuário de Desenvolvimento Java> Conceitos> Construtor Java

O construtor Java constrói programas Java usando seu próprio compilador (o Compilador Eclipse para Java) que implementa a Especificação da Linguagem Java.

Para o Eclipse Mars.1 Release (4.5.1), isso pode atingir de 1,3 a 1,8 inclusive.

Quando você configura um projeto:

 [project-name] > Properties > Java Compiler > Compiler compliance level 

Isso configura o compilador Java do Eclipse para compilar o código para a versão Java especificada, geralmente 1.8 atualmente.

Variáveis ​​de ambiente do host, por exemplo, JAVA_HOME etc, não são usadas.

O compilador Oracle / Sun JDK não é usado.

Primeiro, você está configurando o seu JRE desejado ou o seu JDK desejado?

Mesmo se o seu Eclipse estiver configurado corretamente, pode haver uma configuração específica do projeto maluca em algum lugar. Você pode abrir um menu de contexto em um determinado projeto Java no Project Explorer e selecionar Properties> Java Compiler para verificar isso.

Se nada disso ajudar, deixe um comentário e eu dou outra olhada.

Só para esclarecer, você tem JAVA_HOME definido como uma variável do sistema ou definido nas variables ​​do caminho de class do Eclipse? Tenho certeza (mas não totalmente certa!) De que a variável de sistema é usada pelo compilador de linha de comando (e pelo Ant), mas que o Eclipse modifica esse acréscimo para o JDK usado

Outra abordagem para configurar o compilador do JDK 1.8 com o Maven é usando este plugin:

  org.apache.maven.plugins maven-compiler-plugin 3.5.1  true true C:\Program Files\Java\jdk1.8.0_102\bin\javac 1.8 1.8