Java user.home è impostato su% userprofile% e non viene risolto

La nostra azienda ha recentemente aggiornato da Windows XP a Windows 7 Enterprise. L’installazione di JDK non imposta più user.home sul percorso completo della directory dell’utente, ma invece imposta user.home su %userprofile% . Questo sta causando molti problemi con applicazioni come Eclipse, Maven, ecc. Ora devo impostare -Duser.home nella JVM per ogni applicazione. Qualcun altro ha sperimentato questo? C’è una correzione per questo? Questo sarebbe correlato all’installazione di Windows 7 Enterprise? Ho provato il JDK 1.5 e il JDK 1.6.

Ecco l’elenco delle proprietà. Nota 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... 

Aggiornare:

Usando il collegamento al bug di Andreas_D ho scoperto:

Il valore di HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop è % userprofile% \ Desktop sulla mia installazione di Windows 7 Enterprise.

Quando cambio il valore di questa chiave in C:\Users\politesp\Desktop , il mio user.home si risolve correttamente. Qualche idea sul perché questo sta accadendo?

La maggior parte delle chiavi di registro si trova in:

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

è iniziato con% userprofile%. Ho aggiornato tutte le chiavi del Registro di sistema iniziate con% userprofile% per iniziare con C: \ Users \ myusername. Ho verificato su Windows XP che i percorsi sono in effetti codificati e che% userprofile% non è utilizzato. I tecnici IT hanno menzionato il fatto che le chiavi del Registro di sistema utilizzano in modo predefinito% userprofile% a causa di un profilo predefinito utilizzato in Windows 7. JVM si aspetta che il percorso del desktop sia hardcoded. Non valuterà le variabili d’ambiente.

È ansible aggiornare le chiavi di registro una alla volta o esportare la cartella e cambiare le chiavi. Ecco come esportare e importare le chiavi di 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. 

Ciò è dovuto a un bug lungo sospeso in Java: http://bugs.sun.com/view_bug.do?bug_id=4787931

Mi sembra che, per qualsiasi motivo, %USERPROFILE% non sia stato impostato su un valore. Cosa ottieni se digiti echo %USERPROFILE% sulla shell dei comandi?

Forse non è una funzionalità del sistema operativo ma un problema di configurazione. Sulla mia macchina (Vista) %USERPROFILE% risolve nella mia directory home ed è lo stesso per la proprietà Java user.home

modificare

Ecco un problema di Vista / Windows7 con USERPROFILE e user.home: bug . Potrebbe non risolvere il tuo problema potrebbe darti un’idea ..

Fino a quando Java 8 non è stato risolto, la soluzione è di aggiungere questo nelle variabili di ambiente:
_JAVA_OPTIONS: -Duser.home =% HOMEDRIVE %% HOMEPATH%

o nella riga di comando:
set _JAVA_OPTIONS = -Duser.home =% HOMEDRIVE %% HOMEPATH%

Ho visto la soluzione nei commenti di questa pagina: http://www.timehat.com/javas-user-home-is-wrong-on-windows/

I valori a stringa singola nel registro hanno 2 tipi "REG_SZ" e "REG_EXPAND_SZ" e trattano le stringhe "%data%" diverso.

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

Digitare "REG_EXPAND_SZ" sostituisce "%data%" il valore della variabile di ambiente "data" se definito altrimenti non si verifica alcuna risoluzione.

Le applet per la modifica delle variabili di ambiente della GUI di Windows selezionano il tipo corretto a seconda che "%name%" appaia nel campo del valore.

Questo problema sembra un programma di installazione che fa scelte sbagliate quando si scrive nel registro.