Компиляция кода Java 7 через Maven

Мои списки файлов pom

<project>
  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  ...

Однако при mvn clean install я получаю

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/java -version (здесь which java)

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac также указывает на правильную версию Java

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

На этой машине я использую zsh (echo $0 возвращает -zsh)

В моем .zshrc я определил:

 33 # HOME
 34 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
 35 SCALA_HOME=/Library/Scala/current
 36 FORGE_HOME=~/tools/forge/
 37 
 38 # PATH
 39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
 40 PATH=${PATH}:${JAVA_HOME}/bin
 41 PATH=${PATH}:/bin/
 42 PATH=${PATH}:/sbin/
 43 PATH=${PATH}:/usr/bin/
 44 PATH=${PATH}:/usr/sbin/
 45 PATH=${PATH}:/opt/local/bin/
 46 PATH=${PATH}:/opt/local/sbin/
 47 PATH=${PATH}:/usr/local/git/bin
 48 PATH=${PATH}:/usr/local/git/sbin
 49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
 50 PATH=${PATH}:${SCALA_HOME}/bin
 51 PATH=${PATH}:${FORGE_HOME}/bin
 52 
 53 export PATH

Когда я запускаю mvn clean install --debug, я вижу, что на самом деле я использую Java 6

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
  2 Maven home: /usr/share/maven
  3 Java version: 1.6.0_35, vendor: Apple Inc.
  4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Где это можно определить? У меня есть источник (d) мой .zshrc несколько раз.

Ответ 1

Проверьте mvn script в вашей установке maven, чтобы увидеть, как он создает команду. Возможно, вы или кто-то еще там закодировали a JAVA_HOME и забыли об этом.

Ответ 2

попробуйте использовать более новую версию плагина-компилятора maven:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

также указывать кодировку исходного файла в maven лучше всего в глобальном масштабе:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

EDIT. Поскольку этот ответ все еще привлекает внимание, я хотел бы отметить, что последние значения (начиная с последнего редактирования) равны 3.2 для плагина maven для компилятора и 1.8 для java, поскольку вопросы о компиляции кода java 8 через maven скоро появятся: -)

Ответ 3

У меня была та же проблема, и для решения этой проблемы я следую этой статье в блоге: http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/

$ vim .bash_profile 

export JAVA_HOME=$(/usr/libexec/java_home)

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

специальные tks для @mkyong

EDIT: теперь я использую: jEnv + sdkman

Ответ 4

Пожалуйста, проверьте pom.xml для следующих тегов

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

он должен указать нужную версию jdk

Ответ 5

У меня была та же проблема. Я обнаружил, что это потому, что Maven script просматривает ссылку CurrentJDK ниже и находит 1.6 JDK. Даже если вы установите последний JDK, это не будет разрешено. Хотя вы можете просто установить JAVA_HOME в ваш $HOME/.bash_profile script, я решил исправить символическую ссылку, а именно:

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Обратите внимание, что CurrentJDK указывает на 1.6.0.jdk

Чтобы исправить это, я выполнил следующие команды (вы должны проверить свою установленную версию и соответствующим образом адаптировать).

sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

Ответ 6

Вы должны проверить версию Maven:

mvn -version

Вы найдете версию Java, которую Maven использует для компиляции. Вам может понадобиться reset JAVA_HOME при необходимости.

Ответ 7

Диагностика:

Вы можете видеть, какую версию Java использует Maven, запустив "mvn -version"

Решение для Debian:

mvn script устанавливает внутреннюю переменную JAVA_HOME внутри, ища javac (который javac). Поэтому, если у вас несколько версий Java, установленных одновременно, например. JDK 6 и JDK 7 и использовать систему Debian Alternatives, чтобы выбирать между ними, даже если вы изменили альтернативу "java" на JDK 7, mvn все равно будет использовать JDK 6. Вы также должны изменить альтернативу для "javac". Например:.

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac

EDIT:

На самом деле, еще лучшее решение - использовать альтернативы update-java (например.)

# update-java-alternatives -s java-1.7.0-openjdk-amd64

как описано в https://wiki.debian.org/JavaPackage, потому что это изменит все альтернативы различным инструментам Java (там дюжина или около того).

Ответ 8

Не могли бы вы попробовать новый плагин; на сайте maven:

<version>3.0</version>

Я тоже видел следующее:

<compilerVersion>1.7</compilerVersion>

Ответ 9

Попробуйте изменить настройки компилятора Java в свойствах в Eclipse -

Перейти к: Настройки- > Java- > Компилятор- > Уровень соответствия компилятора- > 1.7 Подать выражение Ok

Перезапустите IDE.

Подтвердить настройку компилятора для проектно- Перейти к: Свойства проекта- > Компилятор Java- > Снимите флажок (используйте соответствие из среды исполнения "JavaSE-1.6" в пути сборки Java.) И выберите 1.7 из раскрывающегося списка. (Игнорировать, если уже 1.7)

Перезапустите IDE.

Если проблема сохраняется, выполните отдельные тестовые примеры, используя команду в терминале -

mvn -Dtest=<test class name> test

Ответ 10

Не уверен, что ОС используется здесь, но вы можете исключить много java-версий futzing un debian/ubuntu с вариантами update-java, чтобы установить стандартную jvm-систему.

#> update-java-alternatives -l
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-7-oracle 1073 /usr/lib/jvm/java-7-oracle

Чтобы установить новый, используйте:

#> update-java-alternatives -s java-7-oracle

Не нужно устанавливать JAVA_HOME для большинства приложений.

Ответ 11

щелкните правой кнопкой мыши проект ur в eclipse и откройте "Run Configurations".. проверьте версию jre там. несколько раз это не изменится по умолчанию в eclipse, даже изменив версию в пути сборки.

Ответ 12

{JAVA_1_4_HOME}/bin/javacyou также может попробовать...

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>{JAVA_HOME_1_7}/bin/javac</executable>
                <fork>true</fork>
        </configuration>
    </plugin>

Ответ 13

Для конкретной компиляции, которая требует JVM (не по умолчанию /etc/alternatives/java), рассмотрим префикс команды mvn с JAVA_HOME следующим образом:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package

Здесь мы предполагаем, что по умолчанию используется Java 8, тогда как для конкретного проекта нам требуется Java 7.

Ответ 14

Хорошо, я просто решил эту проблему самостоятельно. Чем важнее ваш JAVA_HOME, если у вас нет более низкой версии или нет версии по сравнению с исходными/целевыми свойствами из плагина Maven, вы получите эту ошибку.

Убедитесь, что у вас хорошая версия в JAVA_HOME и включите ее в свой PATH.

Ответ 15

Возможно, вы указали неправильную версию java. java -version (в вашем терминале), чтобы проверить версию java, которую вы используете. Перейдите в maven-compile-plugin для последней версии компилятора maven Ваш плагин может выглядеть так, если вы используете java 6, а последняя версия плагина maven-компилятора - 3.1.

<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>

Ответ 16

Ни один из предыдущих ответов полностью не разрешил мой вариант использования.

Необходимо удалить каталог, который был создан. Clean. Затем переустановите. Похоже на проблему с молчаливыми разрешениями.

Ответ 17

У меня была эта проблема в IntelliJ IDEA 14, пока я не зашел в меню "Файл" → "Структура проекта", изменив SDK проекта на 1,7 и уровень языка проекта до 7.

Ответ 18

У меня была эта проблема при работе с eclipse, мне пришлось изменить путь сборки проекта, чтобы он ссылался на jre 7