Как мне получить Eclipse для использования другой версии компилятора для Java?

Кажется, что это должно быть простой задачей, с опциями в меню Preferences для разных JRE и возможностью устанавливать разные компиляторы и пути сборки для проекта. Однако, это также, кажется, просто не работает.

Например, я установил JAVA_HOME в jre для Java 1.6. Мне до сих пор неясно, как Eclipse использует это, но, похоже, это по умолчанию и не принимает переопределения проекта. Я также установил Java 1.5 и добавил JRE для этого в eclipse в разделе Java-> Установленные JRE.

В моем проекте я установил уровень соответствия компилятора на 1,5. В пути сборки проекта я добавил Системную библиотеку для Java 1.5 JRE. Тем не менее, я получаю ошибки компиляции для класса, который реализует PreparedStatement для не реализации абстрактных методов, которые существуют только в Java 1.6 PreparedStatement. В частности, методы

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

Как ни странно, он работал, когда мы компилировали его для Java 1.4, для которой он изначально был написан. Мы добавили JRE для Java 1.4 и обратились к этой системной библиотеке в проекте, установили уровень компилятора проекта на 1.4, и он работает нормально. Но когда я делаю те же изменения, чтобы попытаться указать на Java 1.5, он вместо этого использует 1.6.

Есть идеи почему?

4 ответа

Из строки меню: Проект -> Свойства -> Компилятор Java

Включить специфичные для проекта настройки (проверено) Снимите флажок "использовать соответствие из среды выполнения".... Выберите нужный "уровень соответствия компилятору"

Это позволит вам скомпилировать код "1.5", используя "1.6" JDK.

Если вы хотите использовать 1.5 JDK для создания кода, совместимого с "1.5", то установите подходящий JDK 1.5 и сообщите eclipse, где он установлен, с помощью:

Окно -> Настройки -> Установленные JRE

А потом вернитесь к своему проекту

Проект -> Свойства -> Путь сборки Java -> библиотеки

удалите системные библиотеки 1.6 и: добавьте библиотеку... -> Системная библиотека JRE -> Альтернативная JRE -> JRE, которую вы хотите.

Убедитесь, что правильный JRE находится на пути сборки проекта, сохраните все и наслаждайтесь!

Eclipse использует собственный внутренний компилятор, который может компилироваться в несколько версий Java.

Из Справки Eclipse> Руководство пользователя по разработке Java> Основные понятия> Java Builder

Java-конструктор создает Java-программы с использованием собственного компилятора (Eclipse Compiler for Java), который реализует спецификацию языка Java.

Для Eclipse Mars.1 Release (4.5.1) это может быть от 1,3 до 1,8 включительно.

Когда вы настраиваете проект:

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

Это настраивает компилятор Java Eclipse для компиляции кода с указанной версией Java, обычно сегодня 1.8.

Переменные среды хоста, например, JAVA_HOME и т. Д., Не используются.

Компилятор Oracle/Sun JDK не используется.

Прежде всего, вы устанавливаете желаемый JRE или желаемый JDK?

Даже если ваш Eclipse настроен правильно, где-то может быть дурацкая настройка для конкретного проекта. Вы можете открыть контекстное меню для данного проекта Java в Project Explorer и выбрать "Свойства"> "Java Compiler", чтобы проверить это.

Если ничего из этого не поможет, оставьте комментарий, и я еще раз посмотрю.

Просто чтобы уточнить, у вас есть JAVA_HOME, установленный в качестве системной переменной или установленный в Eclipse переменные classpath? Я почти уверен (но не полностью уверен!), Что системная переменная используется компилятором командной строки (и Ant), но Eclipse изменяет это в соответствии с используемым JDK

Другой подход для настройки компилятора JDK 1.8 с Maven - использовать этот плагин:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
        <verbose>true</verbose>
        <fork>true</fork>
        <executable>C:\Program Files\Java\jdk1.8.0_102\bin\javac</executable>
        <source>1.8</source>
        <target>1.8</target>
     </configuration>
 </plugin>
Другие вопросы по тегам