Вот вопрос. Предположим, у меня есть проект Maven ("A"), который тянет в другом проекте Maven ("B") как зависимость. Оба в настоящее время используют Java 7 для компиляции. Если Project B переключается на Java 8, заставляет ли он заставлять Project A также использовать Java 8?
Если это так, есть ли способ обойти это, т.е. Создать код генерации кода проекта B, который может использовать Project A, без переоценки Project B до Java 7 или обновления проекта A до Java 8? Например, например, если проект B выполняет некоторую форму "источник 1.8 цели 1,7". (javac, похоже, не нравится, и я не могу найти альтернативный компилятор, который будет, например, plexus-compiler-eclipse не поддерживает Java 8, но это еще одна проблема в целом: проблема заключается в развязывании сгенерированный байт-код из исходной версии, который использовался для его создания)
Java совместима в обратном порядке, но не перегружена. При запуске программы с версией JVM (JRE) старше, чем скомпилирована программа с вами, вы получите сообщение об ошибке (обычная ошибка версии Unsupported major.minor). Это вполне логично. Некоторые новые директивы байтового кода, возможно, были введены в более новую версию JRE, о которой старая JRE не знает (особенно со всеми новыми моделями Java 8).
Если у вас есть зависимость, которая скомпилирована с Java 8 (хотя я сомневаюсь, что какая-либо из популярных зависимостей уже перенесена для использования Java 8!), Вам необходимо обновить свой проект, чтобы использовать Java 8.
С другой стороны, если ваш проект обновлен до Java 8, то любые зависимости, независимо от того, были ли они скомпилированы с Java 8, 7 или 6, будут работать из-за гарантии обратной совместимости.
Если Project B переключается на Java 8, заставляет ли он заставлять Project A также использовать Java 8?
Да, если вы не можете скомпилировать Project B с -source 1.7 -target 1.7,
что означает -source 1.7 -target 1.7,
что вы не можете использовать функции Java 8 в B.
Это не имеет никакого отношения к Maven.