Ответ 1
Проверьте mvn
script в вашей установке maven, чтобы увидеть, как он создает команду. Возможно, вы или кто-то еще там закодировали a JAVA_HOME
и забыли об этом.
Мои списки файлов 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 несколько раз.
Проверьте mvn
script в вашей установке maven, чтобы увидеть, как он создает команду. Возможно, вы или кто-то еще там закодировали a JAVA_HOME
и забыли об этом.
попробуйте использовать более новую версию плагина-компилятора 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 скоро появятся: -)
У меня была та же проблема, и для решения этой проблемы я следую этой статье в блоге: 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
Пожалуйста, проверьте pom.xml для следующих тегов
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
он должен указать нужную версию jdk
У меня была та же проблема. Я обнаружил, что это потому, что 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
Вы должны проверить версию Maven:
mvn -version
Вы найдете версию Java, которую Maven использует для компиляции. Вам может понадобиться reset JAVA_HOME при необходимости.
Диагностика:
Вы можете видеть, какую версию 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 (там дюжина или около того).
Не могли бы вы попробовать новый плагин; на сайте maven:
<version>3.0</version>
Я тоже видел следующее:
<compilerVersion>1.7</compilerVersion>
Попробуйте изменить настройки компилятора Java в свойствах в Eclipse -
Перейти к: Настройки- > Java- > Компилятор- > Уровень соответствия компилятора- > 1.7 Подать выражение Ok
Перезапустите IDE.
Подтвердить настройку компилятора для проектно- Перейти к: Свойства проекта- > Компилятор Java- > Снимите флажок (используйте соответствие из среды исполнения "JavaSE-1.6" в пути сборки Java.) И выберите 1.7 из раскрывающегося списка. (Игнорировать, если уже 1.7)
Перезапустите IDE.
Если проблема сохраняется, выполните отдельные тестовые примеры, используя команду в терминале -
mvn -Dtest=<test class name> test
Не уверен, что ОС используется здесь, но вы можете исключить много 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 для большинства приложений.
щелкните правой кнопкой мыши проект ur в eclipse и откройте "Run Configurations".. проверьте версию jre там. несколько раз это не изменится по умолчанию в eclipse, даже изменив версию в пути сборки.
{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>
Для конкретной компиляции, которая требует JVM (не по умолчанию /etc/alternatives/java
), рассмотрим префикс команды mvn
с JAVA_HOME
следующим образом:
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package
Здесь мы предполагаем, что по умолчанию используется Java 8, тогда как для конкретного проекта нам требуется Java 7.
Хорошо, я просто решил эту проблему самостоятельно. Чем важнее ваш JAVA_HOME, если у вас нет более низкой версии или нет версии по сравнению с исходными/целевыми свойствами из плагина Maven, вы получите эту ошибку.
Убедитесь, что у вас хорошая версия в JAVA_HOME и включите ее в свой PATH.
Возможно, вы указали неправильную версию 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>
Ни один из предыдущих ответов полностью не разрешил мой вариант использования.
Необходимо удалить каталог, который был создан. Clean. Затем переустановите. Похоже на проблему с молчаливыми разрешениями.
У меня была эта проблема в IntelliJ IDEA 14, пока я не зашел в меню "Файл" → "Структура проекта", изменив SDK проекта на 1,7 и уровень языка проекта до 7.
У меня была эта проблема при работе с eclipse, мне пришлось изменить путь сборки проекта, чтобы он ссылался на jre 7