Скомпилируйте с Java 6 из Java JDK 8 установлен

Я обязан скомпилировать мой исходный код с Java 6 для университета. В настоящее время у меня на компьютере установлена ​​Java 8 JDK (Linux). Как мне скомпилировать в Java 6?

PS Я понимаю, что не смогу использовать какие-либо функции Java 7 или 8.

pps Я понимаю, что исходный код java 6 будет хорошо компилироваться с использованием Java 8 JDK, однако я обнаружил, что случайно использую функции post Java 6 в своих программах при компиляции дома. Когда я пытаюсь скомпилировать исходный код на лабораторных компьютерах в универе, я сталкиваюсь с кучей ошибок. например, неспособность привести объект к примитиву.

3 ответа

Способ решения этой проблемы - компиляция с использованием более позднего SDK и использование параметров кросс-компиляции при компиляции.

Параметры кросс-компиляции

По умолчанию классы компилируются с классами начальной загрузки и расширения платформы, с которой поставляется javac. Но javac также поддерживает кросс-компиляцию, где классы компилируются с помощью загрузочной версии и классов расширения другой реализации платформы Java. При перекрестной компиляции важно использовать параметры -bootclasspath и -extdirs.

версия

Создает файлы классов, предназначенные для указанного выпуска виртуальной машины. Файлы классов будут выполняться в указанной цели и в более поздних выпусках, но не в более ранних выпусках JVM. Действительными целями являются 1,1, 1,2, 1,3, 1,4, 1,5 (также 5), 1,6 (также 6), 1,7 (также 7) и 1,8 (также 8).

Значение по умолчанию для параметра -target зависит от значения параметра -source:

  • Если опция -source не указана, то значение опции -target равно 1.8
  • Если опция -source равна 1.2, то значение опции -target равно 1.4
  • Если опция -source равна 1.3, то значение опции -target равно 1.4
  • Если опция -source равна 1.5, то значение опции -target равно 1.8
  • Если опция -source равна 1.6, то значением -target является опция 1.8
  • Если опция -source равна 1.7, то значением -target является опция 1.8
  • Для всех других значений параметра -source значением параметра -target является значение параметра -source.

-bootclasspath bootclasspath

Кросс-компиляция с указанным набором загрузочных классов. Как и в случае с пользовательским классом, записи пути загрузочного класса разделяются двоеточиями (:) и могут быть каталогами, JAR-архивами или ZIP-архивами.

Чтобы использовать параметры полностью правильно (т.е. используя также -bootclasspath вариант) требует rt.jar JRE (не JDK) целевой версии.

Вы можете использовать ниже для компиляции

% javac -target 1.6 <whatever you want to compile>

У меня была похожая проблема, когда часть проекта хотела использовать Java 6, а остальная часть проекта требовала Java 8. Для этого вы можете изменить версию Java только в одном окне терминала.

Чтобы изменить версию Java только в одном окне терминала без изменения профиля, используйте:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)

Другие вопросы по тегам