maven $ {user.home}无法正确解析

时间:2009-10-07 00:14:19

标签: java maven-2 properties

我的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 个答案:

答案 0 :(得分:6)

这可能是maven中的一个错误。我前段时间给这个workaround添加了书签:

  

我发现了一种方便的参考方式   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框。

或者,你只是这个错误的另一个受害者:http://bugs.sun.com/view_bug.do?bug_id=4787931。这是一个非常老的错误(超过6年),影响到Java 1.6.x之前的所有版本。

答案 1 :(得分:1)

另一种解决方法可能是通过 Groovy GMaven plugin 更正或生成路径,类似于这个常规代码:

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

也许有人甚至可以覆盖user.home,但我不确定它是否会起作用。因此,如果在早期阶段执行,那么在任何地方使用 ${user.home.fixed} 代替${user.home}都应该有效。