Источник и цель компилятора Maven

Я искал все ответы о том, почему у нас должен быть источник, отличный от целевого, но не созывающий:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
      <source>1.7</source>
      <target>1.8</target>
    </configuration>
  </plugin>

Если JDK обратно совместим, зачем мне устанавливать целевое значение 1,8, когда компиляция выполняется на 1,7?

Установка источника выше целевого не будет работать, пример для ошибки:

Исходная версия 8 требует целевой версии 1.8

Также от Maven:

Простая установка параметра target не гарантирует, что ваш код действительно работает на JRE с указанной версией. Подводный камень - непреднамеренное использование API, которые существуют только в более поздних JRE, что может привести к сбою кода во время выполнения с ошибкой связывания

Кто-нибудь может привести пример? maven source и target предназначены для моего собственного исходного кода, а не для зависимостей, тогда в каком случае я могу использовать API в последующих компиляциях JRE (в моем собственном коде)?

1 ответ

Как правило, можно установить целевую JVM для соответствия исходной JVM, в противном случае. Если целевая JVM НЕ установлена, версия компилятора Java установит ее на эту версию JVM, например, если вы использовали Java 10 для сборки, то файлы целевого класса будут работать только под Java 10, если вы не указали в качестве целевой JVM что-либо ниже.

Я предполагаю, что в случае, когда ваше предприятие нацелено на целевую JVM (например, Java 8 b/c или по соображениям безопасности и / или производительности), которая выше, чем вы хотели бы, чтобы ваша исходная Java была совместима (например, Java 7), тогда вы установите целевую версию выше исходной. Возможно, вы могли бы "поделиться" этой библиотекой кода с другими, которые все еще могут ориентироваться на Java 7 JVM.

Другие вопросы по тегам