Maven не правильно выбирает JAVA_HOME

Я нахожусь в среде Windows и использую maven для компиляции моего проекта. Хотя я только что создал проект и добавил зависимости для различных libararies.

Как я добавил, maven начал жаловаться на отсутствующий tools.jar, поэтому я добавил ниже свой pom.xml:

<dependency>
  <groupId>com.sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>

Когда я запустил установку maven, я получил ошибку для пропавшей банки, как показано ниже:

[ERROR] Failed to execute goal on project GApp: Could not resolve dependencies for project GApp:GApp:war:0.0.1-SNAPSHOT: Could not find artifact com.sun:tools:jar:1.6 at specified path C:\Program Files\Java\jre6\lib\tools.jar -> [Help 1]

Проблема заключается в том, что tools.jar находится в "C:\Program Files\Java\jdk1.6.0_26\lib" и правильно установлен в переменной среды JAVA_HOME, но maven по-прежнему ищет папку jre, как в сообщении об ошибке "C:\Program Files\Java\jre6\lib\tools.jar".

C:\>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26

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

<dependency>
  <groupId>com.sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>C:\Program Files\Java\jdk1.6.0_26\lib\tools.jar</systemPath>
</dependency>

Может кто-нибудь предложить любое динамическое решение для этого?

Ответ 1

Это ошибка в поддержке Eclipse Maven. Eclipse не поддерживает все глобальные свойства Maven в соответствии с спецификациями Maven.

Согласно спецификациям:

${java.home} указывает путь к текущей среде JRE_HOME использовать с относительными путями, чтобы получить, например,

По крайней мере, в Eclipse 4.3.1 это не так, здесь java.home всегда указывает на JRE, который использовался для запуска Eclipse, а не для сборки JRE.

Чтобы устранить проблему, вам нужно запустить Eclipse с помощью JRE из JDK, добавив что-то вроде этого в eclipse.ini (до -vmargs!):

-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll

Ответ 2

Кажется, ваш JAVA_HOME настроен на указание на JRE в затмении.

Ответ 3

НИКОГДА не следует использовать зависящие от системной области зависимости. Весь код в tools.jar будет доступен только через запущенную JVM. Вы должны полностью удалить эту зависимость.

Также, чтобы проверить, какое время выполнения Maven использует только вызов

mvn -v

Если у вас все еще есть зависимость от инструментария jar как проблема, одна из зависимостей, которые вы добавили, имеет эту зависимость (и это действительно плохое качество). Чтобы узнать, какой из них запускается

mvn dependency:tree

или если это не удастся, просто удалите одну зависимость за другой, пока проблемы не исчезнут для команды выше.

Затем, когда вы знаете, откуда оно взялось, вы можете решить, что делать дальше. Один путь - использовать исключение для зависимостей, которые вытягивают инструменты.

Ответ 4

Свойство Maven ${java.home} устанавливается и берется из разных мест в зависимости от выполнения Eclipse:

  • из стандартного JRE, выбранного для рабочей области

    Окно > Настройки > Java > Установленные JRE

  • из конкретного проекта Eclipse,

    Путь сборки Java > Библиотеки > Системная библиотека JRE

  • из конфигурации "Запуск".

    Конфигурации запускa > Конкретная конфигурация запускa > JRE

Помните, что ваши домашние пути JRE указывают на JDK или JRE под JDK

Ответ 5

Похоже, вы используете Maven в Eclipse. Eclipse не поддерживает JAVA_HOME.

Убедитесь, что вы настроили JRE в настройках Eclipse на желаемый JDK.

Ответ 6

Когда вы добавляете переменную среды JAVA_HOME, если в пути есть пробелы, вы должны обернуть все это в кавычки.

Ответ 7

Возможно, вы используете неправильную установку Maven. Переключитесь в окно > Настройки > Maven > Установки. У меня была установка на установку Fedora Maven; изменив его на значение по умолчанию (версия, встроенная в m2e), устранила проблему для меня.

Я подозреваю, что причиной этой проблемы является то, что установка Fedora Maven использовала Fedora OpenJDK, которая, вероятно, ставит tools.jar в странное место (все о Fedora OpenJDK странно и нестандартно), поэтому Maven не может найти он.