Назначение параметра target компилятора Java javac

Я пытаюсь найти вариант использования, когда необходимо использовать специальную целевую версию компилятора javac с параметром target.

Java имеет обратную совместимость, не так ли? Итак, если я скомпилирую программу hello world с версией 11, она может работать на JVM с версией 8, или?

Единственный вариант использования, который я мог себе представить, - это когда у вас есть зависимости (другие jar-файлы), которые скомпилированы в определенной версии, и вы должны сопоставить эту специальную версию при компиляции собственного кода.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
219
2

Ответы 2

Java имеет обратную совместимость, не так ли? Итак, если я скомпилирую программу hello world с версией 11, она может работать на JVM с версией 8

Это точно назад. Если у вас есть версия класса Java, скомпилированная с версией 8, Java 11 совместима с назад и может запускать ее. Обратное не является обратной совместимостью и является целью флага командной строки --target. В частности, класс, скомпилированный компилятором Java 11 может, работает на Java 8. Без этого вы бы получили java.lang.UnsupportedClassVersionError: неподдерживаемая версия major.minor

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

-target version

Generate class files that target a specified version of the VM. Class files will run on the specified target and on later versions, but not on earlier versions of the VM. Valid targets are 1.1, 1.2, 1.3, 1.4, 1.5 (also 5), 1.6 (also 6), and 1.7 (also 7) ... . The default for -target depends on the value of -source:

If -source is not specified, the value of -target is 1.7
If -source is 1.2, the value of -target is 1.4
If -source is 1.3, the value of -target is 1.4
If -source is 1.5, the value of -target is 1.7
If -source is 1.6, the value of -target is 1.7
For all other values of -source, the value of -target is the value of -source.

Обратитесь к javadoc для получения более подробной информации здесь.

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