2013-02-26 1 views
3

У меня есть рабочее пространство Eclipse с несколькими Java-проектами (в Maven); они имеют зависимости друг от друга. Недавно я начал изменять только некоторые из проектов для таргетинга на Java 1.7 и, кроме решения каких-либо новых предупреждений, при компиляции ничего не изменилось.Есть ли проблемы, когда проекты имеют разные версии компилятора Java?

Однако, когда я пытаюсь запустить все, кажется, что что-то может пойти не так. Как загружаются файлы классов и возникают ли какие-либо проблемы в следующих ситуациях?

  • Есть ли проблема, когда проект Java 1.6 зависит от проекта Java 1.7? Будет ли 1.6 VM просто отказываться от запуска любого 1,7-генерируемого байт-кода или что-то странное произойдет, чтобы заставить его работать?
  • Есть ли проблема, когда происходит обратное?
+0

Да, он отказывается развертывать. Оба варианта ** jvm ** должны быть одинаковыми. – nav0611

ответ

6

Когда проект java 1.6 зависит от проекта Java 1.7 или проекта java 1.7, зависит от проекта Java 1.6, вы всегда должны запускать свою программу на более высокой версии JVM, которая в этом случае равна java 1.7. В двух словах, в большинстве случаев, файлы классов, созданные с помощью компилятора Java SE 6, будут корректно работать в Java SE 7. Но есть некоторые исключения. Пожалуйста, смотрите Incompatibilities between Java SE 7 and Java SE 6 для списка несовместимости между Java 6 и Java 7.

0

Я также столкнулся с аналогичной проблемой, и, насколько мне известно, я не думаю, что 1.6 VM может запускать любой 1,7-генерируемый байт-код, но я думаю, что обратное возможно, так как 1.7 - обновленная версия 1.6VM.

1

Вы можете создать проект с JDK 1.6, который имеет некоторые библиотеки, где генерируется с 1,7

ОДНАКО если часть кода из проект 1.7 нуждается в некоторой функции JDK 1.7 (например, он использует новую комбинированную функцию Swing с generics), она не будет работать на 1,6 JVM.

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