Java user.home被设置为%userprofile%,未解析
我们公司最近从Windows XP升级到Windows 7 Enterprise。JDK安装不再将user.home设置为用户目录的完整路径,而是将user.home设置为Java user.home被设置为%userprofile%,未解析,java,windows-7,jvm,Java,Windows 7,Jvm,我们公司最近从Windows XP升级到Windows 7 Enterprise。JDK安装不再将user.home设置为用户目录的完整路径,而是将user.home设置为%userprofile%。这给Eclipse、Maven等应用程序带来了很多问题。我现在必须在JVM中为每个应用程序设置-Duser.home。还有其他人经历过吗?有解决办法吗?这是否与Windows 7 Enterprise的安装有关?我试过1.5JDK和1.6JDK 以下是属性列表。注意user.home: -- lis
%userprofile%
。这给Eclipse、Maven等应用程序带来了很多问题。我现在必须在JVM中为每个应用程序设置-Duser.home。还有其他人经历过吗?有解决办法吗?这是否与Windows 7 Enterprise的安装有关?我试过1.5JDK和1.6JDK
以下是属性列表。注意user.home:
-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\Program Files\Java\jre6\bin
java.vm.version=16.0-b13
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=US
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:\Users\politesp\Desktop
java.runtime.version=1.6.0_18-b07
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\Program Files\Java\jre6\lib\endorsed
os.arch=x86
java.io.tmpdir=C:\Users\politesp\AppData\Local\Temp\
line.separator=
java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows 7
sun.jnu.encoding=Cp1252
java.library.path=C:\WINDOWS\system32;.;C:\WINDOWS\Sun\...
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot Client Compiler
os.version=6.1
user.home=%userprofile%
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=Cp1252
java.specification.version=1.6
user.name=politesp
java.class.path=.
java.vm.specification.version=1.0
sun.arch.data.model=32
java.home=C:\Program Files\Java\jre6
java.specification.vendor=Sun Microsystems Inc.
user.language=en
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode, sharing
java.version=1.6.0_18
java.ext.dirs=C:\Program Files\Java\jre6\lib\ext;C:...
sun.boot.class.path=C:\Program Files\Java\jre6\lib\resour...
java.vendor=Sun Microsystems Inc.
file.separator=\
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+m...
更新:
使用Andreas_D的bug链接,我发现:
在我安装Windows 7 Enterprise时,HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop
的值为%userprofile%\Desktop
当我将此键的值更改为
C:\Users\politesp\Desktop
时,我的user.home正确解析。知道为什么会发生这种情况吗?在我看来,无论出于何种原因,%USERPROFILE%
似乎没有被设置为值。如果在命令shell中键入echo%USERPROFILE%
,会得到什么结果
也许这不是操作系统的功能,而是配置问题。在我的机器上(Vista)%USERPROFILE%
解析为我的主目录,Java属性user.home的解析也是一样的
编辑
以下是有关USERPROFILE和user.home的Vista/Windows7问题:。可能无法解决您的问题可能会给您一个想法。大多数注册表项位于:
HKEY\ U当前\用户\软件\ Microsoft\Windows\CurrentVersion\Explorer\Shell
文件夹
从%userprofile%
开始。我将所有以%userprofile%
开头的注册表项更新为以C:\Users\myusername
开头。我在Windows XP上验证了路径实际上是硬编码的,并且没有使用%userprofile%
。IT人员提到注册表项默认使用%userprofile%
,因为Windows 7中使用了默认配置文件。JVM希望桌面路径是硬编码的。它不会评估环境变量
您可以逐个更新注册表项,也可以导出文件夹并更改注册表项。以下是如何导出和导入注册表项:
转到开始>运行
键入regedit
。这将打开注册表编辑器
浏览至HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹
右键单击Shell文件夹
,然后选择导出
选择桌面作为目标,输入Shell Folders
作为文件名并保存文件
在文本编辑器中打开文件,并将%userprofile%
替换为C:\\Users\\yourusername
。保存并关闭文件
返回注册表编辑器窗口,从主菜单中选择文件>导入
选择Shell Folders.reg
,然后单击打开
关闭注册表编辑器并从桌面上删除Shell Folders.reg
文件
这是因为Java中存在一个长期未解决的bug:
在Java 8之前,解决方案是将其添加到环境变量中:
_JAVA_选项:-Duser.home=%HOMEDRIVE%%HOMEPATH%
或在命令行中:
设置_JAVA_OPTIONS=-Duser.home=%HOMEDRIVE%%HOMEPATH%
我在本页的评论中看到了解决方案:
注册表中的单个字符串值有两种类型“REG\u SZ”
和“REG\u EXPAND\u SZ”
,它们对%data%”字符串的处理方式不同
Type "REG_SZ" leaves any "%data%" as is.
键入“REG\u EXPAND\u SZ”
替换%data%”
环境变量值,如果定义了该值,则不会进行解析
Windows GUI环境变量编辑小程序根据值字段中是否出现“%name%”
选择正确的类型
此问题听起来像是安装程序在写入注册表时做出了错误的选择。echo%USERPROFILE%打印出C:\Users\PolitesP是否区分大小写?您是否尝试过使用USERPROFILE而不是USERPROFILE?至少在VISTA上,环境变量名不区分大小写。我真的怀疑微软在Windows 7上改变了这一点…@Andreas\u D。谢谢,HKEY\u CURRENT\u USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop的值是%userprofile%\Desktop。当我将此键的值更改为c:\Users\politesp时,my user.home将正确解析。你知道为什么一些使用Windows 7的个人没有这个问题吗?也许这是在从XP升级到Win7的过程中发生的-%userprofile%在用于创建一些注册表项时可能没有设置。可能是您的注册表中有更多的键,其片段%userprofile%而不是实际路径。我今天早上也看到了这个bug。令人难以置信的是,他们做了这个选择,没有听到每个人的抱怨……有趣的是,很多人仍然错过了»不要使用这个注册表项«注意这里;)对你的问题进行了很好的研究,并对答案进行了很好的跟进。互联网更适合这个问答。这应该在Java8中修复。。。。