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.