Я пытаюсь найти вариант использования, когда необходимо использовать специальную целевую версию компилятора javac с параметром target.
Java имеет обратную совместимость, не так ли? Итак, если я скомпилирую программу hello world с версией 11, она может работать на JVM с версией 8, или?
Единственный вариант использования, который я мог себе представить, - это когда у вас есть зависимости (другие jar-файлы), которые скомпилированы в определенной версии, и вы должны сопоставить эту специальную версию при компиляции собственного кода.




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 для получения более подробной информации здесь.