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

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

Как я добавил их, 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>

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

10 ответов

Решение

Это ошибка в поддержке 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

Вы никогда не должны использовать зависимости области видимости системы. Весь код в tools.jar будет доступен только через работающую JVM. Вы должны удалить эту зависимость вообще..

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

mvn -v

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

mvn dependency:tree

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

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

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

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

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

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

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

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

  • из конфигурации Run.

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

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

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

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

Также посмотрите файл.mavenrc в своем домашнем каталоге. Это застало меня врасплох.

Я изменил все, как было предложено, только чтобы обнаружить, что мой файл.mavenrc устанавливает JAVA_HOME на более старую версию.

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

Проверьте, есть ли у вас файл .mavenrc, возможно, он заставляет JAVA_HOME быть чем-то другим, чем то, что установлено в переменной среды.

это просто ошибка в поддержке maven для eclipse. Вы можете пока игнорировать эту ошибку.

Поддержка локальных зависимостей будет прекращена в ближайшем будущем. Я думаю, что разработчики maven понимают, что этот подход — не лучший способ решить эту проблему, но мы знаем, что существуют некоторые проприетарные jar-файлы (например, лицензия на драйвер JDBC для db2), которые никогда не будут размещаться в общедоступный репозиторий...

Похоже, вы работаете с Maven в Eclipse. Eclipse не консультируется с JAVA_HOME.

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

Другие вопросы по тегам