Java user.home устанавливается в% userprofile% и не разрешается

Недавно наша компания обновилась с 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 правильно решает. Любая идея, почему это происходит?

Большинство разделов реестра, расположенных по адресу:

HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Папки оболочки

началось с% 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. 

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

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

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

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

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

До 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/

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

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

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

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

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

  • Пул строк и постоянный пул
  • Как узнать, какое хранилище использует моя JVM?
  • «Ошибка при инициализации VM; Не удалось зарезервировать достаточно места для кучи объектов ", используя -Xmx3G
  • Является открытым исходным кодом JVM?
  • Общая память между двумя JVM
  • Каков максимальный размер кучи по умолчанию для JVM Sun от Java SE 6?
  • Каково точное значение статических полей в Java?
  • Что на самом деле вызывает ошибку переполнения стека?
  • Где хранятся статические методы и статические переменные на Java?
  • Проект Android Studio Gradle «Невозможно запустить процесс / инициализацию виртуальной машины»
  • Какова стандартная кодировка JVM?
  • Давайте будем гением компьютера.