JAVA_HOME на OSX с Eclipse и Maven
Недавно я установил машину OSX, и у меня возникли проблемы с получением Maven для загрузки JAVA_HOME при запуске внутри Eclipse.
Я сделал следующее:
- Задайте JAVA_HOME в ~/.bash_profile с помощью
export JAVA_HOME=$(/usr/libexec/java_home)
- Укажите VM для Eclipse внутри eclipse.ini до
-vm
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin/java
- Задайте JAVA_HOME в
/etc/mavenrc
с помощью echo JAVA_HOME=\
/usr/libexec/java_home -v 1.7` | sudo tee -a/etc/mavenrc`
Работа с CLI выглядит так, как ожидалось. java -version
Отпечатки:
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
echo $JAVA_HOME
Отпечатки:
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
mvn -v
Отпечатки:
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 17:22:22+0200)
Maven home: /usr/local/Cellar/maven/3.1.1/libexec
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9", arch: "x86_64", family: "mac"
Выполняется запуск mvn install
внутри проекта из CLI. Однако выполнение этого же из Eclipse не выполняется со следующим:
Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:jar (attach-javadocs) on project suppress-warnings: MavenReportException: Error while creating archive: Unable to find javadoc command: The environment variable JAVA_HOME is not correctly set.
В Eclipse > Preferences > Java > Installed JREs
я вижу, что JDK 7 с тем же адресом, что указан в JAVA_HOME
, установлен по умолчанию и также используется для моего проекта. Переключение между встроенным временем выполнения Maven или внешней установкой дает те же результаты.
Где и как мне установить JAVA_HOME
, чтобы процесс Maven, запущенный из Eclipse, получил правильное расположение JAVA_HOME
?
Ответы
Ответ 1
Проблема заключается в том, что в Mac OSX переменные среды, определенные в .bashrc
или .bash_profile
, экспортируются только в терминальные среды. Объединенное графическое приложение, такое как Eclipse, не видит их, и, следовательно, ни одна из выполненных конфигураций не выполняется из Eclipse.
Решение состоит в том, чтобы создать (если оно не существует) или отредактировать файл /etc/launchd.conf
и добавить к нему следующую строку:
setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
Конечно, изменено до фактического значения JAVA_HOME
. (обратите внимание, что трюк, обычно используемый в .bash_profile
с $(/usr/libexec/java_home)
, не работает в launchd.conf
- или, по крайней мере, я не мог заставить его работать)
После того, как вы это сделали, вам потребуется перезагрузить компьютер. После перезагрузки конфигурации M2E Maven смогут увидеть переменную JAVA_HOME
и выполнить правильно.
Ответ 2
Eclipse дает вам возможность указывать переменные среды запуска. Сделайте это там.
Ответ 3
Я не могу комментировать Jeen Broekstra, потому что я новичок: - (
Его решение хорошее, его нужно лишь немного улучшить.
В /etc/launchd.conf
достаточно поместить инструкцию
getenv JAVA_HOME
Тогда в /etc/bashrc
export JAVA_HOME=`/usr/libexec/java_home`
Затем повторный вход (нет необходимости перезагружать;-), а Eclipse работает как ожидается w.r.t. Maven.
Ответ 4
Это выше не работает в YOSEMITE для ГРАФИЧЕСКИХ ПРИЛОЖЕНИЙ! Как затмение, или что-то началось с Spotlight. (.bash_profile, launchd.conf работает только для сеансов терминала.) Перед запуском eclipse просто откройте окно терминала и выдайте следующую команду:
launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
(С вашим путем установки! Возможно, работает с $(/usr/libexec/java_home) вместо полного пути.)
Посмотрите всю замечательную статью о постоянном решении здесь: Установка переменных среды через launchd.conf больше не работает в OS X Yosemite?
Ответ 5
Это решение работало лучше всего для меня:
- добавить файл /etc/mavenrc.
- добавить JAVA = "/path/to/your/jdk" в файл.
- Не нужно перезагружаться или выходить из системы, Maven сразу же подбирает изменения.
Подробнее об этом blog.
Ответ 6
-
В вашем домашнем каталоге: (/Users/{username})
-
nano.bash_profile и добавьте следующую строку:
экспорт
JAVA_HOME =/Library/Java/JavaVirtualMachines/1.6.0_31-b04-413.jdk/Содержание/дома `
-
Убедитесь, что путь "/Library/Java/JavaVirtualMachines/1.6.0_31-b04-413.jdk/Contents/Home"
существуют.
Ответ 7
Возможно, вы ищете ~/.MacOSX/environment.plist
Добавьте новую строку в environment.plist, чтобы указать предпочтительный JAVA_HOME, например.
JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home
envvars, установленный здесь, будет "замечен" приложениями, включая Eclipse
Ответ 8
Я столкнулся с той же проблемой. Пробовал решение Robert и Jeen, но по какой-то причине он не работал. Поэтому очень простое решение, которое сработало для меня, заключалось в том, чтобы добавить JAVA_HOME в качестве переменной окружения в eclipse. В конфигурации eclipse project maven добавьте JAVA_HOME в список переменных среды.
Ответ 9
Простой способ решить эту проблему, добавьте следующую конфигурацию в pom.xml
<javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
полный код:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<show>private</show>
<nohelp>true</nohelp>
<aggregate>true</aggregate>
<charset>UTF-8</charset>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
<javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>javadoc</goal>
</goals>
</execution>
</executions>
</plugin>
Ответ 10
Найдите артефакт maven-javadoc-plugin в файле pom.xml и добавьте java.home в конфигурацию javadocExecutable:
<plugin>
...
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
</configuration>
...
</plugin>
Причина: для использования приложений собственное значение "java.home" - лучший и самый простой подход, поскольку он удаляет зависимость от локальных переменных локальных систем, которые могут отличаться или не отличаться в другом контейнере
Ответ 11
В Eclipse проверьте правильность выбора JRE для Maven для JDK.
В Maven Runner Java Runtime (JRE) необходимо указать JDK (не JRE), так как команда javadoc не включена в JRE. Поэтому Use Internal JRE
не работает с maven attach-javadocs.