2016-09-15 2 views
-3

У меня есть несколько крупных проектов, работающих на Java 6. Но я планирую начать их создание на Java 8, так как многие инструменты сборки отошли от Java 6.Можно ли скомпилировать позже JDK?

Можно ли просто скомпилировать их с помощью Java 8, а затем развернуть их в веб-контейнере с Java 8? Если нет, то каковы соображения?

FYI, у них нет надлежащего автоматизированного набора тестов на месте.

+2

Это довольно сложно сказать, не зная базы кода. Почему бы вам просто не попробовать его в среде разработки и посмотреть, что произойдет? К сожалению, у вас нет автоматических тестов, поэтому вам придется вернуться к ручному тестированию. – Stefan

+1

Значит, есть шанс, что код сломается? Я замечаю, что Oracle предоставила некоторые проблемы совместимости на http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html#A999198 Я думаю, да, это может сломаться. – sancho21

ответ

2

Проблемы могут быть связаны с:

  • deprecated methods, которые удаляются в Java 8, и вы использовали в старом Java 6 кода
  • different behaviour для некоторых методов:

Там являются аспектами поведения платформы, которые преднамеренно неопределены, и базовая реализация может измениться в выпуске платформы.

  • конфигурация веб-контейнер, который может отличаться от версии, поддерживающей Java 6 и версию с поддержкой Java 8
  • внешних библиотек, которые изменились во время перехода от Java 6 для Java 8 удаления старых методов, так что ваш код не может скомпилировать

Так что, возможно, что переход от java 6 к java 8 может сломать ваш код.

Но если код компилируется, то он абсолютно уверен, что поведение кода такое же, потому что обычно (но не всегда) предоставляется ретро совместимость. Вы можете быть уверены в том, что выполняете только полный набор модульных тестов как на версиях java 6, так и на java 8.


Вот некоторые из примеров не совместимости между Java 6 и Java 7:

JDK-6527962: Retire нестандартный пакет com.sun.image.codec.jpeg. Если ваш код использует этот пакет, он не компилируется на java 8

JDK-6563734: Path2D.Float и Path2D.Дважды должен иметь окончательные методы getPathIterator Если ваш код ovewrite методов объявлен окончательный код не будет компилироваться, переходя к Java 8

Здесь полный официальный список incompatibilities between java 6 and java 7

Здесь полный официальный список incompatibilities between java 7 and java 8

+0

У вас на самом деле есть примеры методов, удаленных в Java 8, насколько я знаю, первое удаление устаревших методов может произойти в Java 9, но iirc никогда не происходило в более ранних версиях (помимо непубличных файлов API) –

+0

@MarkRotteveel Я не делаю, если метод был удален, но, конечно, есть методы, которые изменяли исключения метаданных или заменяли их на окончательные, чтобы их расширение приводило к не компилируемому коду –

+0

По моему опыту, что этого не происходит (или по крайней мере: I не может вспомнить ни одного примера), Java, как правило, довольно строг в сохранении обратной совместимости. В прошлом были некоторые проблемы с изменениями в поведении, или люди, злоупотребляющие «ошибками», которые позже были исправлены, нарушая их программное обеспечение. –

2

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

Для веб-контейнера, с версией jdk, также было бы изменено. Это может вызвать некоторые проблемы в зависимости от поставщика программного обеспечения и всех сервисов, которые вы используете в контейнере (JNDI, пул соединений и т. Д.). У меня когда-то была проблема с переносом приложения на более высокую версию JDK. Мы также обновили Websphere. Мы использовали JSF, и более высокая версия WAS включала JSF-банки, которые сталкивались с нашими банками приложений.

В ваших приложениях может быть использовано много сторонней библиотеки, на которые может быть оказано влияние. Опять же, в основном вы должны быть ОК, но могут быть небольшие проблемы. Не зная ваших приложений, я могу предложить только выполнить миграцию и тест для подтверждения.

0

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

Однако вам необходимо знать, на чем сосредоточиться. Вы должны прочитать об изменениях, внесенных на version 7 и на version 8.

Смежные вопросы