Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java user.home被设置为%userprofile%,未解析_Java_Windows 7_Jvm - Fatal编程技术网

Java user.home被设置为%userprofile%,未解析

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

我们公司最近从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:

-- 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中修复。。。。