Java Maven сборка источника и цели не работает - PullRequest
2 голосов
/ 11 октября 2019

У меня на компьютере установлены JDK 7 и 8.

Я пытаюсь установить JAVA_HOME на JDK 8, а в файле maven pom я устанавливаю 1.7, как показано ниже:

<properties>
    <maven.compiler.target>1.7</maven.compiler.target>
    <maven.compiler.source>1.7</maven.compiler.source>
</properties>

Я получил ошибку ниже во время сборки maven:

incomparable types: boolean and java.lang.Object

Исходный код:

Map mapData = (LinkedHashMap)it.next();
if(true == mapData.get("isTrueOrFalse")){ // java 8 doesn't allow this, it have to be [true == (boolean)mapData.get("isTrueOrFalse")]
    xxx
}

Я не могу изменить исходный код, поэтому я изменяю JAVA_HOME до JDK 7 и Maven Pom остаются 1,7. Тогда я смогу успешно выполнить сборку через Maven.

Насколько я понимаю, установив источник и цель, он должен позволить мне скомпилировать на более низкую совместимую версию Java, но это не так. Кто-нибудь может помочь объяснить это?

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

После стольких поисков поста о совместимости с Java я обнаружил две возможные причины, по которым это происходит:

1) это ошибка в JDK 7, она не должна позволять JDK 7 компилировать это кактип не совпадает. Это исправлено в JDK 8, поэтому даже если мы используем -source=1.7 и -target=1.7, это не разрешено. JDK 1.7 нарушает обратную совместимость? (generics)

2) это может произойти из-за несовместимого возвращаемого типа реализации Java, при использовании компиляции JDK 8 в -source=1.7 и -target=1.7 путь сборки (классы начальной загрузки) будет по-прежнемууказывающий на JDK 8, поэтому реализация Java Map может возвращать другой тип, что вызывает проблему выше. Проблема с обратной совместимостью java 8: новые методы в JDK

0 голосов
/ 11 октября 2019

Страница Apache Maven говорит, что:

Простая установка параметра target не гарантирует, что ваш код действительно выполняется на JRE с указанной версией (...) Вточно так же, установка параметра source не гарантирует, что ваш код на самом деле компилируется в JDK с указанной версией

. Вы можете попробовать сначала настроить плагин напрямую (вместо того, что есть в pom.xml). ):

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
      <verbose>true</verbose>
      <fork>true</fork>
      <executable><!-- path-to-javac --></executable>
      <compilerVersion>1.7</compilerVersion>
      <source>1.7</source>
      <target>1.7</target>
    </configuration>
  </plugin>
</plugins>

Наконец, вы можете попробовать Компиляция источников с использованием другого JDK

...