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

sch*_*eve 3 java maven-2 properties

我的pom.xml中有以下行:

<updateRepositoryURL>file:/${user.home}/.m2/repository/repository.xml</updateRepositoryURL>
Run Code Online (Sandbox Code Playgroud)

当我试图在我的程序中使用它时,结果字符串是:

file:/c:Documents and Settings<myusername>/.m2/repository/repository.xml
Run Code Online (Sandbox Code Playgroud)

<myusername>有趣的是我的用户名在哪里.

不过它应该是

file:/c:/Documents and Settings/<myusername>/.m2/repository/repository.xml
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法,为什么它没有正确解决?

提前致谢

Pas*_*ent 6

这可能是maven中的一个错误.我前段时间已将此解决方法加入书签:

我找到了一种方便的方法来引用${user.home} Maven构建中的Java系统属性,该构建支持Windows对于home/profile目录的荒谬路径名:

c:\Documents and Settings\foobar.
Run Code Online (Sandbox Code Playgroud)

问题是,当使用Maven时,这个参数化属性不会作为一个属性值传递,而是作为三个传递,因为构建Maven中的某个位置会对空格或反斜杠进行扼流并将其解释为三个参数:

"c:\Documents", "and", "Settings\foobar"
Run Code Online (Sandbox Code Playgroud)

或者将windows反斜杠视为转义字符并将其删除,以便我的参数化user.home变为:

"c:Documents and Settingsfoobar"
Run Code Online (Sandbox Code Playgroud)

[...]

但是,在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>
Run Code Online (Sandbox Code Playgroud)

然后在activeProfiles中添加适当的条目:

<activeProfile>laptop-xp</activeProfile>
Run Code Online (Sandbox Code Playgroud)

现在,每个用户都可以使用该 user.home属性在Windows框中正确引用其主路径.

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