Проекты Java, заставляющие зависимых принимать версии Java?

1

Вот вопрос. Предположим, у меня есть проект 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, но это еще одна проблема в целом: проблема заключается в развязывании сгенерированный байт-код из исходной версии, который использовался для его создания)

  • 0
    Если B использует Java 8, лучшее, на что вы способны - это скомпилировать A с jdk8, но target = 1.7. Это, вероятно, будет бессмысленно, так как классы в B не будут работать под JDK7. Итак, короче говоря, если B переключается, либо A остается в более старой версии, либо он также должен переключаться.
Теги:
maven
compatibility
javac
maven-compiler-plugin

2 ответа

2

Java совместима в обратном порядке, но не перегружена. При запуске программы с версией JVM (JRE) старше, чем скомпилирована программа с вами, вы получите сообщение об ошибке (обычная ошибка версии Unsupported major.minor). Это вполне логично. Некоторые новые директивы байтового кода, возможно, были введены в более новую версию JRE, о которой старая JRE не знает (особенно со всеми новыми моделями Java 8).

Если у вас есть зависимость, которая скомпилирована с Java 8 (хотя я сомневаюсь, что какая-либо из популярных зависимостей уже перенесена для использования Java 8!), Вам необходимо обновить свой проект, чтобы использовать Java 8.

С другой стороны, если ваш проект обновлен до Java 8, то любые зависимости, независимо от того, были ли они скомпилированы с Java 8, 7 или 6, будут работать из-за гарантии обратной совместимости.

0

Если 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню