Maven не будет компилировать Java 7 с 1.7 JDK

#spring #maven

#spring #maven

Вопрос:

Я должен быть анти-Maven, так как каждый раз, когда я пытаюсь его использовать, я трачу много времени на борьбу, а затем просто сдаюсь. Мое последнее, что я не могу скомпилировать исходный код Java 7, несмотря на наличие 1.7 JDK.

Вот результат mvn compile . Интересно то, что когда я использовал Maven 3.0.4, в сообщении об ошибке говорилось -source 1.5 вместо -source 1.6 с Maven 3.2.1

 [ERROR] .../src/main/java/pox/common/ServiceResponse.java:[300,43] diamond operator is not supported in -source 1.6
[ERROR] (use -source 7 or higher to enable diamond operator)
[ERROR] .../src/main/java/pox/common/ServiceRequest.java:[185,43] diamond operator is not supported in -source 1.6
[ERROR] (use -source 7 or higher to enable diamond operator)
 

Как вы можете видеть, я использую последнюю версию Maven, а Maven использует Java 1.7.

 $ mvn -v
Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-14T12:37:52-05:00)
Maven home: /usr/local/maven
Java version: 1.7.0_40, vendor: Oracle Corporation
Java home: /usr/local/jdk1.7.0_40-x64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.18-371.4.1.el5", arch: "amd64", family: "unix"
 

Я думаю mvn , что скрипт добавляет /jre , поскольку моя переменная среды не указывает ее.

 $ echo -e "$JAVA_HOMEn$M2_HOME"
/usr/local/java7-x64
/usr/local/maven

$ which javac
/usr/local/java7-x64/bin/javac
 

Я писал некоторые POJOs, которые я хотел Springify, поэтому я решил использовать Maven и обнаружил, что это начало работы с Maven на сайте Spring.

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#getting-started

Я скопировал pom.xml исходный код and с сайта в свой проект STS / Eclipse, который содержал только исходный код Java, и попытался скомпилировать. У STS нет проблем с компиляцией любого исходного кода src/main/java . Я могу удалить код, зависящий от Java 1.7, и заставить Maven скомпилироваться.

Все, что я нашел до сих пор, подразумевает, что у меня неправильный JAVA_HOME набор, но я указываю на 1.7 JDK.

Комментарии:

1. Предоставьте POM. Вы почти наверняка не устанавливаете там версию.

Ответ №1:

Ну, у меня была похожая проблема, у меня был проект с maven и eclipse, но были проблемы с компиляцией, потому что исходным кодом maven по умолчанию была java 1.5, и, конечно, мой код был на java 1.6, поэтому мне пришлось добавить плагин компилятора maven, чтобы установить правильную версию моего исходного кода.код, вот моя конфигурация, поэтому, я думаю, вам следует изменить только 1.6 на 1.7

 <build>
    <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.1</version>
          <configuration>
            <source>1.6</source>
            <target>1.6</target>
          </configuration>
        </plugin>
    </plugins>
</build>
 

Комментарии:

1. Спасибо. Кажется странным, что я должен был бы сказать Maven использовать поведение компилятора по умолчанию. Я пытался maven-enforcer-plugin и потерпел неудачу. Возможно, я сделал это неправильно.

2. Значение по умолчанию 1.5 для Maven немного странно (учитывая, что даже срок службы 1.6 истек), но меня это тоже задело. Я настраиваю родительский pom в своих проектах, который я использую везде, в который включены такие вещи, как JUnit и т. Д., А также по умолчанию Java для более поздней версии

3. У меня есть maven 3.1.1, я думаю, не слишком старый. Но есть проблема в версии 3.2.1, которая является самой последней, по умолчанию, похоже, 1.6, я думаю, что у разработчиков maven недостаточно времени для ее обновления.

4. Это может быть связано с обратной совместимостью. Некоторые пользователи были бы раздражены, если бы старые POM работали по-другому после обновления. Любое значение по умолчанию, вероятно, в какой-то момент устареет.