Java user.home устанавливается в% userprofile% и не разрешается - PullRequest
34 голосов
/ 25 января 2010

Наша компания недавно обновила Windows XP до Windows 7 Enterprise. Установка JDK больше не устанавливает user.home в качестве полного пути к каталогу пользователя, а вместо этого устанавливает user.home на %userprofile%. Это вызывает много проблем с приложениями, такими как Eclipse, Maven и т. Д. Теперь мне нужно установить -Duser.home в JVM для каждого приложения. Кто-нибудь еще испытывал это? можно ли это исправить? Будет ли это связано с установкой Windows 7 Enterprise? Я пробовал 1.5 JDK и 1.6 JDK.

Вот список свойств. Примечание 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, я обнаружил:

Значение HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop равно % userprofile% \ Desktop в моей установке Windows 7 Enterprise.

Когда я изменяю значение этого ключа на C:\Users\politesp\Desktop, мой user.home разрешается правильно. Есть идеи, почему это происходит?

Ответы [ 5 ]

24 голосов
/ 28 января 2010

Большинство ключей реестра расположены по адресу:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Папки

началось с% userprofile%. Я обновил все разделы реестра, которые начинались с% userprofile%, и начинались с C: \ Users \ myusername. В Windows XP я проверил, что пути на самом деле жестко запрограммированы и что% userprofile% не используется. ИТ-специалисты отметили, что для разделов реестра по умолчанию используется% userprofile% из-за профиля по умолчанию, используемого в Windows 7. JVM ожидает, что путь к рабочему столу будет жестко задан. Он не будет оценивать переменные среды.

Вы можете обновить ключи реестра по одному или экспортировать папку и изменить ключи. Вот как вы можете экспортировать и импортировать ключи реестра:

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.
15 голосов
/ 21 сентября 2010

Это связано с долгой выдающейся ошибкой в ​​Java: http://bugs.sun.com/view_bug.do?bug_id=4787931

11 голосов
/ 25 января 2010

Мне кажется, что по каким-то причинам %USERPROFILE% не было установлено значение. Что вы получите, если наберете echo %USERPROFILE% в командной оболочке?

Возможно, это не функция ОС, а проблема с конфигурацией. На моей машине (Vista) %USERPROFILE% преобразуется в мой домашний каталог, и то же самое для свойства Java user.home

Редактировать

Вот проблема Vista / Windows7 с USERPROFILE и user.home: ошибка . Может не решить вашу проблему, может дать вам представление ..

10 голосов
/ 06 февраля 2014

До Java 8, где это исправлено, решение состоит в том, чтобы добавить это в переменные среды:
_JAVA_OPTIONS: -Duser.home =% HOMEDRIVE %% HOMEPATH%

или в командной строке:
set _JAVA_OPTIONS = -Duser.home =% HOMEDRIVE %% HOMEPATH%

Я видел решение в комментариях на этой странице: http://www.timehat.com/javas-user-home-is-wrong-on-windows/

1 голос
/ 07 января 2015

Одиночные строковые значения в реестре имеют 2 типа "REG_SZ" и "REG_EXPAND_SZ", и они обрабатывают "%data%" строки по-разному.

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

Тип "REG_EXPAND_SZ" заменяет "%data%" значение переменной окружения "data", если оно определено, иначе разрешение не выполняется.

Апплеты редактирования переменных среды графического интерфейса Windows выбирают правильный тип в зависимости от того, появляется ли "%name%" в поле значения.

Эта проблема звучит как установщик, делающий неправильный выбор при записи в реестр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...