Почему Eclipse жалуется, что в проекте указано соответствие компилятора 1.8, но используется JRE 11?
Я установил соответствие компилятора проекта Eclipse 1,8, потому что я хочу создавать файлы JAR, которые могут выполняться на компьютерах с установками JRE 8.
Однако на моем компьютере для разработки у меня установлена только JRE 11. Я предположил, что это будет хорошо, потому что я ожидал, что JRE 11 сможет выполнять файлы 1.8 и выше.
Тем не менее, Eclipse выдает предупреждение об этом (которое я не могу найти способ отключить), и диалоговое окно настроек компилятора говорит: "При выборе соответствия 1.8 убедитесь, что совместимая JRE установлена и активирована (в настоящее время 11)", что делает звук как JRE 11 не совместим с 1.8. Это действительно так?
Какие неправильные предположения я делаю здесь, точно?
Кроме того, действительно ли мне нужно установить JRE 8, чтобы создать код, совместимый с JRE 8?
3 ответа
В Project > Properties: Java Compiler установите флажок " Использовать --release", чтобы избежать предупреждения.
Например, с параметром Use --release и уровнем соответствия компилятора, равным 1,8 " foo ".strip()
отображается как ошибка даже с Java 11 JDK, потому что String#strip()
который был представлен в Java 11, отсутствует в Java 8.
Смотрите также:
Если вы хотите быть на 100% уверены, скомпилируйте тот же JDK, который вы будете использовать в рабочей среде, по крайней мере, с той же основной версией. JRE 11 может точно выполнить файлы классов 1.8. Однако более старая JVM может не поддерживать файлы более новых классов. Даже если вы ориентируетесь на старую версию и создаете файлы классов, которые должны быть совместимыми, вы, вероятно, компилируете для более новых классов JDK, и API действительно меняется. Это может сломать ваш код, если вы попытаетесь запустить его на более старой JVM.
Большую часть времени это будет работать, но лучше, чем потом сожалеть! Слушайте предупреждения в этом случае, они имеют смысл.
РЕДАКТИРОВАТЬ: см. Ответ по howlger вместо опции --release.
Есть шанс, что вы не установили JDK? Если я правильно помню, предупреждение было связано с этим. Похоже, в моей комбинации Eclipse, OpenJDK и Ubuntu отсутствует пакет openjdk-11-jdk.