Гарантирует ли javac -target 1.3, что классы будут работать под JRE 1.3? - PullRequest
4 голосов
/ 17 ноября 2010

Статья " Не обманывайте себя javac -target 1.4 " показывает, что компиляция с -target 1.4 все еще может создавать файлы классов, которые не будут работать на JRE 1.4.

Также описывается, как параметр -bootclasspath может решить эту проблему.

Теперь мой вопрос: если я скомпилирую версию javac Sun JDK 1.6, используя параметры source и target, установленные на 1.3, можно предположить, что скомпилированные классы будут работать на JRE 1.3?

Ответы [ 2 ]

4 голосов
/ 17 ноября 2010

Они не будут работать, если вы используете какие-либо методы или классы в стандартной библиотеке, которых не было в 1.3, так как эти файлы не скомпилированы в вашей программе, но являются частью библиотек JVM.

0 голосов
/ 17 ноября 2010

На самом деле, как говорится в статье, ваш код будет совместим с байт-кодом 1.3, но не будет связан с 1.3. Как следствие, вы можете использовать классы или методы после версии 1.3 (как указано в их примере), если вы используете rt.jar из более новой версии, чем ожидаемая версия 1.3.

Как следствие, единственный верный способ разработки для 1.3 - это использовать 1.3 JDK ... или полагаться на инструменты проверки, такие как ... о черт! Я уверен, что есть один плагин для отчетов maven, который может проверить, совместим ли ваш код с ожидаемым JDK, но не могу найти, как он называется.

Однако обратите внимание, что существуют такие инструменты, как Retrotranslator , которые будут использовать ваш код пост 1.5 для его адаптации к предыдущим версиям ... при условии, что ваш код полагается исключительно на JDK, поскольку они могут быть не в состоянии для обработки всех внешних зависимостей API

...