maven $ {user.home} не разрешается правильно - PullRequest
3 голосов
/ 07 октября 2009

В моем файле pom.xml есть следующая строка:

<updateRepositoryURL>file:/${user.home}/.m2/repository/repository.xml</updateRepositoryURL>

, и когда я пытаюсь использовать его в своей программе, результирующая строка:

file:/c:Documents and Settings<myusername>/.m2/repository/repository.xml

, где <myusername>, как ни странно, мое имя пользователя.

однако должно быть

file:/c:/Documents and Settings/<myusername>/.m2/repository/repository.xml

Есть ли у кого-нибудь идеи, почему он не разрешается должным образом?

Заранее спасибо

Ответы [ 2 ]

6 голосов
/ 07 октября 2009

Это может быть ошибка в Maven. Я добавил это в закладки обходной путь некоторое время назад:

Я нашел удобный способ сослаться на Системное свойство Java ${user.home} в сборке Maven, которая поддерживает Смешное имя Windows главная / профильные каталоги:

c:\Documents and Settings\foobar.

Проблема в том, что при использовании Maven это параметризованное свойство не получает передается как одно значение свойства, но как три, потому что где-то в построить Maven дроссели на пространствах или обратная косая черта и интерпретирует это как либо три аргумента:

"c:\Documents", "and", "Settings\foobar"

или обрабатывает обратную косую черту окон как экранировать и удаляет их так мой параметризованный user.home становится:

"c:Documents and Settingsfoobar"

[...]

Однако в Windows XP, если я не установил user.home на пути сборки каждый время, обратную косую черту или пространство проблемы приводят к тому, что файлы не будут найдено.

Чтобы исправить это, добавьте этот профиль в $M2_HOME/conf/settings.xml файл:

<profile>
<id>laptop-xp</id>
<properties>
<user.home>C:/Documents and Settings/${user.name}</user.home>
</properties>
</profile>

Затем добавьте соответствующую запись в activeProfiles:

<activeProfile>laptop-xp</activeProfile>

Теперь каждый пользователь сможет использовать user.home свойство для ссылки их домашний путь правильно на Windows box.

Или вы просто еще одна жертва этой ошибки: http://bugs.sun.com/view_bug.do?bug_id=4787931. Это очень старая ошибка (более 6 лет), которая затрагивает все версии вплоть до Java 1.6.x.

1 голос
/ 14 июня 2016

Другим обходным решением может быть исправление или создание пути с помощью плагина Groovy GMaven , аналогичного следующему коду:

System.setProperty(  
  'user.home.fixed',  
  System.getProperty('user.home').replaceAll( '\\\\', '/' )  )

Может быть, можно даже переопределить user.home, но я не уверен, сработает ли это. Таким образом, использование ${user.home.fixed} везде вместо ${user.home} должно работать тогда, если выполняется на ранней стадии.

...