Будет ли работать компиляция для Java 1.5 на Java 1.7? - PullRequest
13 голосов
/ 22 октября 2011

Я недавно перешел на Java 7 в одном из моих проектов.Я утверждаю, что он может работать на Java 1.5 просто потому, что нет ничего, от чего я зависел бы, в Java 6 или 7. Однако при компиляции сегодня я заметил следующее:

bootstrap class path not set in conjunction with -source 1.5

Google нашел мало информации по этому предупреждению.Означает ли это, что вы не можете скомпилировать в Java 1.5 из Java 1.7?

Ответы [ 4 ]

13 голосов
/ 22 октября 2011

Этот блог Oracle объясняет предупреждение:

http://blogs.oracle.com/darcy/entry/bootclasspath_older_source

Причина в том, что если вам не удалось установить rt.jar для более старой платформы, то:

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

12 голосов
/ 22 октября 2011

Значит ли это, что вы не можете скомпилировать в Java 1.5 из Java 1.7?

Нет, это не так.Это означает, что есть правильный и неправильный способ сделать это ... и вы делаете это неправильно.

Правильный способ компиляции для Java 1.5 на Java 1.7 JDK:1007 *

  • Возьмите копию "rt.jar" из Java 1.5 и поместите ее в путь загрузки компиляции.

  • Компиляция с -source1.5 и - цель 1.5.

В предупреждающем сообщении говорится, что вы не выполнили первое из них.


Способ, которым вы строитепрямо сейчас неявно использует версию 1.7 "rt.jar" для API времени выполнения Java.Это может работать!(Действительно, должно работать при условии, что вы не внесли изменений в код с момента его последней сборки в версии 1.5.) Однако существует риск того, что вы можете случайно ввести зависимости от классов или методов, добавленных в Java.1,6 или 1,7.Это может привести к ошибкам во время выполнения при попытке запустить приложение на Java 1.5.

6 голосов
/ 22 октября 2011
  1. Вам лучше установить -source и -target 1.5.

  2. Чтобы быть уверенным, что вы случайно не включили зависимости от новых классов, методов,или поля, используйте плагин maven-animal-sniffer или что-то в этом роде.

2 голосов
/ 28 августа 2012

- source 1.5 убедится, что исходные файлы соответствуют соглашениям Java 5.--target 1.5 обеспечит соответствие сгенерированных файлов классов соглашениям Java 5.Ни один из них не защитит вас от использования библиотечных методов Java 6 или 7.Вы должны либо скомпилировать соответствующий rt.jar с помощью --bootclasspath, либо использовать что-то вроде animal-sniffer-plugin (если вы используете maven), который будет проверять сигнатуру типа всего и сравнивать с опубликованными профилями.

С помощью animal-sniffer-plugin вы можете получить удовольствие, поскольку вы можете столкнуться со сторонними библиотеками, использующими API Java 6, что может привести к сбою процесса сборки, если вы используете Java 5.

...