Назначение параметра назначения Java-компилятора javac - PullRequest
0 голосов
/ 24 декабря 2018

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

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

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

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

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

-target version

Создание файлов классов, предназначенных для указанной версии виртуальной машины.Файлы классов будут выполняться в указанной цели и в более поздних версиях, но не в более ранних версиях виртуальной машины.Действительными целями являются 1,1, 1,2, 1,3, 1,4, 1,5 (также 5), 1,6 (также 6) и 1,7 (также 7) ....Значение по умолчанию для -target зависит от значения -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 здесь .

0 голосов
/ 24 декабря 2018

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

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

...