我正在使用Maven,它将本地存储库存储在用户主文件夹下。
我决定将用户个人资料从C:\Users\Dany
移到D:\Users\Dany
,以节省我的SSD磁盘空间。我也改变了Windows注册表中的几个键。
一切正常,但Maven仍将 Artifact 保存到C:\Users\Dany\.m2\repository
。
我知道如何更改settings.xml
中的本地存储库位置。
但是有人可以解释Maven的行为吗?
附言
IntelliJ IDEA还将其数据保存到C:\Users\Dany\.IntelliJIdea11
。
UPD System.getProperty("user.home");
返回C:\Users\Dany
。
UPD2
Windows comand行中的set USERPROFILE
表示USERPROFILE=D:\Users\Dany
。
UPD3
问题是有关Java如何获取用户主文件夹位置的问题,而不是有关如何设置Maven存储库位置的问题
最佳答案
在Windows上,Java从注册表获取user.home属性:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹\桌面
然后它将删除最后一个文件夹。
例如:%userprofile%\Desktop =>%userprofile%
这将在Java 8中修复。
在此之前,解决方案是将其添加到环境变量中:
_JAVA_OPTIONS:-Duser.home =%HOMEDRIVE %% HOMEPATH%
或在命令行中:set _JAVA_OPTIONS = -Duser.home =%HOMEDRIVE %% HOMEPATH%
我在此页面的评论中看到了解决方案:
http://www.timehat.com/javas-user-home-is-wrong-on-windows/