web-dev-qa-db-fra.com

Java user.home est défini sur% userprofile% et n'est pas résolu

Notre entreprise a récemment mis à niveau de Windows XP vers Windows 7 Enterprise. L'installation JDK ne définit plus user.home sur le chemin complet du répertoire utilisateur, mais définit à la place user.home sur %userprofile%. Cela cause beaucoup de problèmes avec des applications telles que Eclipse, Maven, etc. Je dois maintenant définir -Duser.home dans la JVM pour chaque application. Quelqu'un d'autre a-t-il vécu cela? Y a-t-il une solution à cela? Serait-ce lié à l'installation de Windows 7 Entreprise? J'ai essayé le 1.5 JDK et le 1.6 JDK.

Voici la liste des propriétés. Remarque 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...

Mise à jour:

En utilisant le lien vers le bug d'Andreas_D, j'ai découvert:

La valeur de HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop est % userprofile%\Desktop sur mon installation de Windows 7 Enterprise.

Lorsque je change la valeur de cette clé en C:\Users\politesp\Desktop, mon user.home se résout correctement. Une idée pourquoi cela se produit?

34
Dan Polites

La majorité des clés de registre situées à:

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

a commencé avec% userprofile%. J'ai mis à jour toutes les clés de registre commençant par% userprofile% pour commencer par C:\Users\myusername. J'ai vérifié sur Windows XP que les chemins sont en fait codés en dur et que% userprofile% n'est pas utilisé. Les informaticiens ont mentionné que les clés de registre utilisaient par défaut% userprofile% en raison d'un profil par défaut utilisé dans Windows 7. La machine virtuelle Java attend que le chemin du bureau soit codé en dur. Elle n'évaluera pas les variables d'environnement.

Vous pouvez mettre à jour les clés de registre une par une ou vous pouvez exporter le dossier et modifier les clés. Voici comment exporter et importer les clés de registre:

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.
24
Dan Polites

Cela est dû à un bogue en suspens depuis longtemps dans Java: http://bugs.Sun.com/view_bug.do?bug_id=4787931

15
Brett

Il me semble que - pour quelque raison que ce soit - %USERPROFILE% n'a pas été défini sur une valeur. Que recevez-vous si vous tapez echo %USERPROFILE% sur le shell de commande?

Ce n'est peut-être pas une fonctionnalité du système d'exploitation, mais un problème de configuration. Sur ma machine (Vista) %USERPROFILE% se résout dans mon répertoire personnel et il en va de même pour la propriété Java propriété user.home

Modifier

Voici un problème avec Vista/Windows7 avec USERPROFILE et user.home: bug . Peut ne pas résoudre votre problème pourrait vous donner une idée ..

11
Andreas_D

Jusqu'à Java 8 où cela est résolu, la solution consiste à l'ajouter dans les variables d'environnement:
_ Java_OPTIONS: -Duser.home =% HOMEDRIVE %% HOMEPATH%

ou en ligne de commande:
set _Java_OPTIONS = -Duser.home =% HOMEDRIVE %% HOMEPATH%

J'ai vu la solution dans les commentaires de cette page: http://www.timehat.com/javas-user-home-is-wrong-on-windows/

10
Luka Bradeško

Les valeurs de chaîne unique dans le registre ont 2 types "REG_SZ" et "REG_EXPAND_SZ" et ils traitent "%data%" chaînes différemment.

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

Tapez "REG_EXPAND_SZ" remplace "%data%" les "data" valeur de la variable d'environnement si définie sinon aucune résolution n'a lieu.

Les applets de modification des variables d'environnement de l'interface graphique Windows sélectionnent le type correct selon que "%name%" apparaît dans le champ de valeur.

Ce problème ressemble à un programme d'installation qui fait de mauvais choix lors de l'écriture dans le registre.

1
Conrad T. Pino