Java user.home está sendo configurado para% userprofile% e não está sendo resolvido

Nossa empresa recentemente atualizou do Windows XP para o Windows 7 Enterprise. A instalação do JDK não está mais configurando user.home para o caminho completo do diretório do usuário, mas está configurando user.home para %userprofile% . Isso está causando muitos problemas com aplicativos como o Eclipse, Maven, etc. Agora preciso configurar -Duser.home na JVM para cada aplicativo. Alguém mais experimentou isso? Existe uma correção para isso? Isso seria relacionado à instalação do Windows 7 Enterprise? Eu tentei o 1.5 JDK e o 1.6 JDK.

Aqui está a lista de propriedades. Observe o 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... 

Atualizar:

Usando o link para o bug de Andreas_D eu descobri:

O valor das HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop é % userprofile% \ Desktop na minha instalação do Windows 7 Enterprise.

Quando altero o valor dessa chave para C:\Users\politesp\Desktop , meu user.home é resolvido corretamente. Alguma ideia do porquê isso está acontecendo?

A maioria das chaves de registro localizadas em:

Pastas HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell

começou com% userprofile%. Atualizei todas as chaves de registro que começaram com% userprofile% para começar com C: \ Users \ myusername. Verifiquei no Windows XP que os caminhos são de fato codificados e que% userprofile% não é usado. Os técnicos de TI mencionaram que as chaves de registro usavam o% userprofile% devido a um perfil padrão sendo usado no Windows 7. A JVM espera que o caminho do Desktop seja codificado. Não irá avaliar variables ​​de ambiente.

Você pode atualizar as chaves de registro uma a uma ou exportar a pasta e alterar as chaves. Aqui está como você pode exportar e importar as chaves de registro:

 1. Go to Start > Run. 2. Type regedit. This opens the registry editor. 3. Browse to HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders. 4. Right click on Shell Folders and choose Export. 5. Select the Desktop as the destination and enter Shell Folders for the file name and save the file. 6. Open the file in a text editor and replace %userprofile% with C:\\Users\\yourusername. Save and close the file. 7. Go back to the registry editor window and select File > Import from the main menu. 8. Select Shell Folders.reg and click Open. 9. Close the registry editor and delete the Shell Folders.reg file off of the desktop. 

Isso se deve a um bug muito antigo no Java: http://bugs.sun.com/view_bug.do?bug_id=4787931

Parece-me como – por qualquer motivo – %USERPROFILE% não foi definido para um valor. O que você ganha se você digitar echo %USERPROFILE% no shell de comando?

Talvez não seja um recurso do sistema operacional, mas um problema de configuração. Na minha máquina (Vista) %USERPROFILE% resolve para meu diretório pessoal e é o mesmo para a propriedade Java user.home

Editar

Aqui está um problema do Vista / Windows7 com USERPROFILE e user.home: bug . Pode não resolver o seu problema pode lhe dar uma idéia ..

Até o Java 8, onde isso é corrigido, a solução é include isso nas variables ​​de ambiente:
_JAVA_OPTIONS: -Duser.home =% HOMEDRIVE %% HOMEPATH%

ou na linha de comando:
set _JAVA_OPTIONS = -Duser.home =% HOMEDRIVE %% HOMEPATH%

Eu vi a solução nos comentários desta página: http://www.timehat.com/javas-user-home-is-wrong-on-windows/

Valores de string únicos no registro têm 2 tipos "REG_SZ" e "REG_EXPAND_SZ" e eles tratam strings "%data%" diferente.

 Type "REG_SZ" leaves any "%data%" as is. 

Digite "REG_EXPAND_SZ" substituindo "%data%" o valor da variável de ambiente "data" se definido. Caso contrário, nenhuma resolução ocorrerá.

Os applets de edição da variável de ambiente da GUI do Windows selecionam o tipo correto dependendo se "%name%" aparecer no campo de valor.

Esse problema parece um instalador fazendo escolhas ruins ao gravar no registro.