Не удается заставить Maven распознать Java 1.8
Я не могу заставить Maven использовать Java 1.8. Использование 1.8 в качестве цели приводит к следующей ошибке:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
(default-compile) on project csaro: Fatal error compiling: invalid target
release: 1.8 -> [Help 1]
Причина ошибки достаточно очевидна: Maven не использует правильную версию Java:
$ mvn -version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T07:51:42-06:00)
Maven home: /usr/local/Cellar/maven/3.2.2/libexec
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"
Но установленная версия Java должна быть 1,8:
$ java -version
java version "1.8.0_20-ea"
Java(TM) SE Runtime Environment (build 1.8.0_20-ea-b22)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b21, mixed mode)
И JAVA_HOME установлен:
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
Я также попробовал команду здесь (которая создает mavenrc
). Я попытался перезагрузить компьютер несколько раз и проверил, что env var правильно установлен (он установлен в .bash_profile
).
Maven был установлен с Homebrew.
Java 1.8 отлично работает в Eclipse (который использует m2e). Я просто не могу заставить Maven работать в командной строке.
Ответы
Ответ 1
Оказывается, у меня был забытый ~/.mavenrc
файл, который установил значение JAVA_HOME
.
Для будущих читателей проверьте следующие места для мест, которые могут переопределить JAVA_HOME
(в порядке возрастания приоритета):
-
~/.bash_profile
-
~/.bash_login
-
~/.bashrc
-
~/.profile
-
/etc/mavenrc
-
~/.mavenrc
Ответ 2
Для меня проблема заключалась в том, что при установке из jdk-8u25-macosx-x64.dmg
установка не обновила ссылку каталога /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
на новый 1.8 JDK. Возможно, это не проблема исходного вопроса, но это решение для меня, когда я столкнулся с тем же сообщением об ошибке.
Я не знаю, почему установщик не связывает его, и чтобы сделать ситуацию более запутанной, путь различен в зависимости от того, установлена ли она из Oracle или Apple. См. Mac OS X 10.6.7 Путь Java Путь JDK запутывается
Я сделал следующее, чтобы исправить мою среду
cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/<installed_jdk_version>.jdk/Contents CurrentJDK
Ответ 3
Решение, которое работало для меня:
В Eclipse у меня была неправильная конфигурация запуска в моей сборке Maven. Перейдите в
Run Configurations → JRE [Tab]
и установите время выполнения для Java 8.
Ответ 4
Я столкнулся с той же проблемой в моей системе CentOS 6.5.
java -version
вернула версию Java 8, но javac -version
вернула версию Java 7.
Мне пришлось запускать следующие команды, чтобы все символические ссылки, связанные с Java, указывали на мою установку JDK 8:
sudo alternatives --config java
sudo alternatives --config javac
sudo alternatives --config jre_openjdk
sudo alternatives --config java_sdk_openjdk
Ответ 5
Ваш JAVA_HOME
переопределяется из другого места. Попробуйте выполнить эхо в mvn
прямо перед вызовом java.
Ответ 6
У меня была такая же проблема, мне нужно было 2 шага, чтобы сделать правильный:
- Убедитесь, что
JAVA_HOME
настроен правильно на JDK;
- JDK и JRE в eclipse должны указывать ту же версию.
Для меня 1 шаг был прав, у 2-го шага была проблема. В eclipse "Свойства проекта" Путь сборки "Установленная JRE" указывает на JDK.
Ответ 7
Вы используете раннюю версию доступа 1,8. Теперь, когда это было выпущено, вы должны установить выпущенную версию.
Проверьте установку maven, чтобы узнать, есть ли у вас связанная с ним конфигурация, которая указывает конкретный JDK. Иногда есть сценарии-оболочки, которые reset JAVA_HOME перед запуском maven, или исполняемый файл maven запускается в оболочке, которая ссылается на файл конфигурации, который может привязать вас к определенной JVM.
Ответ 8
Если вы используете Maven на сервере непрерывной интеграции, обязательно проверьте его параметры, поскольку он может переопределить JDK, используемый Maven. Для Дженкинса мне пришлось добавить новый 1.8 JDK в общие настройки и настроить мой проект, чтобы использовать его.