2016-01-22 3 views
0

Можем ли мы использовать компилятор JDK 1.8 для компиляции исходного кода, для параметра sourceCompatibility которого установлено значение 1.7.sourceCompatibility option in build.gradle for 1.7

ModuleA имеет этот набор 1,7, а ModuleB и ModuleC - 1,8. Какой компилятор следует использовать для компиляции всех вышеперечисленных модулей. Я предполагаю, что это должен быть JDK 1.7.

ответ

0

Я предполагаю, что у вас есть два вопроса:

Используйте jdk8 скомпилировать программу, написанную для java7: Да, Java славится своей обратной совместимости.

Используйте jdk для компиляции проекта с модулями, написанными с различной совместимостью источника.: Используйте последнюю версию. В вашем случае, jdk8. Если что-то пошло не так, установите и используйте несколько jdks.

EDIT: Это правда, что проблемы могут возникнуть, если вы скомпилируете java 7 prog с jdk8, но в моих 200+ локальных сборках и 400+ CI-сборках ничего не получилось. Уровень проблемы настолько низок, что я просто принимаю это во внимание. Если вы считаете это НЕСЧАСТНЫМ, важно, ВСЕГДА установите и используйте соответствующие jdks.

1

Вы можете столкнуться с проблемами при компиляции кода 1.7 с помощью компилятора 1.8. Недостаточно простого значения -source и target до 1.7, и вы должны получить предупреждение во время компиляции, которая жалуется на путь класса начальной загрузки.

Если вы случайно используете класс или метод, введенный с 1.8 - e.g. this one, компилятор его не поймает. Выполнение кода во время выполнения 1.7 приведет к ошибке NoSuchMethodError.

Итак, если вы намереваетесь запускать свой код во время выполнения 1,7, вы должны либо скомпилировать с помощью компилятора 1.7, либо установить путь bootclasspath.

0

Я согласен с Франком, вы можете столкнуться с проблемами времени выполнения. actual one мы обнаружили, используя новый JDK для компиляции кода, который должен работать на старой JRE.