Ответ 1
Не совсем. Здесь ссылка на предложение для опции:
Мы определили новую опцию командной строки,
--release
, которая автоматически настраивает компилятор для создания файлов классов, которые будут связаны с реализацией данной версии платформы. Для платформ, предопределенных вjavac
,--release N
эквивалентно-source N -target N -bootclasspath <bootclasspath-from-N>
. (акцент мой)
Нет, это не эквивалентно -source N -target N
. Причина этого добавления указана в разделе "Мотивация":
javac
предоставляет две опции командной строки:-source
и-target
, которые могут использоваться для выбора версии языка Java, принятой компилятором, и версии файлов классов, которые она создает, соответственно. Однако по умолчаниюjavac
компилируется против самой последней версии API-интерфейсов платформы. Таким образом, скомпилированная программа может случайно использовать API, доступные только в текущей версии платформы. Такие программы не могут работать на старых версиях платформы, независимо от значений, переданных в-source
и `-target. опции. Это долгосрочная точка боли в юзабилити, так как пользователи ожидают, что, используя эти параметры, они получат файлы классов, которые могут выполняться на указанной версии платформы.
Короче говоря, указание исходных и целевых параметров недостаточно для кросс-компиляции. Поскольку javac
, по умолчанию, компилируется с использованием новейших API-интерфейсов платформы, их нельзя гарантировать, что они будут работать в более старых версиях. Вам также необходимо указать параметр -bootclasspath
, соответствующий старой версии, для кросс-компиляции. Это будет включать правильную версию API для компиляции и разрешить ее выполнение в старой версии. Поскольку это очень часто забывали, было решено добавить один вариант командной строки, который сделал все необходимые вещи для правильной кросс-компиляции.
Дальнейшее чтение в списке рассылки и Oracle Docs, Исходная ошибка была зарегистрирована здесь. Обратите внимание, что после интеграции этой опции сборки JDK поставляются в комплекте с описаниями API-интерфейсов платформы более старых версий, упомянутых в разделе "Риски и допущения". Это означает, что вам не нужна старая версия, установленная на вашем компьютере, для работы с кросс-компиляцией.