2009-10-07 99 views
2

我已經得到了下面一行在我的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 

沒有人有任何想法,爲什麼它是不解析正確?

在此先感謝

+0

您使用的是什麼JDK和操作系統? %USERPROFILE%的值是多少? – 2009-10-07 00:21:38

+0

有更多的四處看看。發現它正在解決它有點正確,其獲得 「file:/ c:\ Documents and Settings \ /.m2/repository/repository.xml」 使用Windows 。我相信這是使用反斜槓來劃分路徑而不是正斜槓的問題。感謝Pascal。 – schubySteve 2009-10-07 00:43:46

+0

是的,問題來自反斜槓。請參閱下面的答案。 – 2009-10-07 00:56:10

回答

6

這可能是一個在maven中的錯誤。我書籤這workaround前段時間:

我發現引用 Java系統屬性${user.home} 一個Maven內構建一個支持 Windows的荒謬路徑名 家/配置文件目錄的便捷方式:

c:\Documents and Settings\foobar. 

問題是,使用Maven的時候,這個 參數化屬性沒有得到 通過爲一個屬性值, 但三個過去了,由於S2 omewhere在 構建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框中正確地引用 他們的主頁路徑。

或者,你只是這個bug的另一個受害者:http://bugs.sun.com/view_bug.do?bug_id=4787931。這是一個非常古老的bug(超過6年),它影響到Java 1.6.x之前的所有版本。

+0

謝謝,這工作,但會繼續尋找領導請求的另一種解決方案。鏈接似乎不起作用給503錯誤。 – schubySteve 2009-10-07 01:37:52

+0

解決方法是+1,另一種方法是將文件放在其他位置。您可以在設置中覆蓋localRepository以指向c:\。m2 \ repository或其他簡短且易於查找的內容 – 2009-10-07 06:56:34

0

另一種解決方法可能是通過Groovy GMaven plugin,類似這樣的Groovy代碼糾正或產生路徑:

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

也許一個甚至可以覆蓋user.home,但我不知道這是否會工作。所以使用${user.home.fixed}到處而不是${user.home}應該工作,然後在早期階段執行。

相關問題