【问题标题】:Uppercase vs. capitalized environment variable names during debug调试期间大写与大写的环境变量名称
【发布时间】:2017-01-07 00:23:22
【问题描述】:

在调试与启动会话期间,什么可能导致以下不同的行为?

在 eclipse-debug 和 maven-run 中,我将所有环境变量都设为大写,而在 eclipse-run 中,一些环境变量保持在 windows 中的定义。

@Test
public void testEnvironmentVariables() {
    ArrayList<String> keys = new ArrayList<>(System.getenv().keySet());
    Collections.sort(keys);
    System.out.println(keys);
}

Run 执行的输出:notice http.proxyUser

[=::, ALLUSERSPROFILE, APPDATA, APR_ICONV_PATH, CLASSPATH, CLINK_DIR, COMPUTERNAME, ChocolateyBinRoot, ChocolateyInstall, ComSpec, CommonProgramFiles, CommonProgramFiles(x86), CommonProgramW6432, DEBUG_PORT, DEFLOGDIR, EC_COMPUTER_OU, EC_HOMEAPPDATA, EC_USER_DEPARTMENT, EC_USER_DG, EC_USER_DISPLAY_NAME, EC_USER_ELK, EC_USER_OU, EXTRA_JAVA_PROPERTIES, FP_NO_HOST_CHECK, GRADLE_HOME, HOMEDRIVE, HOMEPATH, JAVA_HOME, JAVA_OPTS, LDMS_LOCAL_DIR, LOCALAPPDATA, LOGONSERVER, LocalRunSetup, M2, M2_HOME, M2_REPO, MAVEN_OPTS, MW_HOME, NUMBER_OF_PROCESSORS, ORACLE_BASE, ORACLE_HOME, OS, PATH2, PATHEXT, PROCESSOR_ARCHITECTURE, PROCESSOR_IDENTIFIER, PROCESSOR_LEVEL, PROCESSOR_REVISION, PSModulePath, PUBLIC, Path, ProgramData, ProgramFiles, ProgramFiles(x86), ProgramW6432, SBT_HOME, SESSIONNAME, SFT_SOFTGRIDSERVER, SystemDrive, SystemRoot, TEMP, TMP, USERDNSDOMAIN, USERDOMAIN, USERDOMAIN_ROAMINGPROFILE, USERNAME, USERPROFILE, UUMDS_CFG, VAGRANT_HOME, VBOX_MSI_INSTALL_PATH, VSEDEFLOGDIR, chocolatey_bin_root, debugFlag, http.proxyHost, http.proxyPassword, http.proxyPort, http.proxyUser, http_proxy, https.proxyHost, https.proxyPassword, https.proxyPort, https.proxyUser, https_proxy, myProxy, no_proxy, uumds.config.location, windir, windows_tracing_flags, windows_tracing_logfile]

Debug 执行时的输出:notice HTTP.PROXYUSER

[ALLUSERSPROFILE, APPDATA, APR_ICONV_PATH, CHOCOLATEYBINROOT, CHOCOLATEYINSTALL, CHOCOLATEY_BIN_ROOT, CLASSPATH, CLINK_DIR, COMMONPROGRAMFILES, COMMONPROGRAMFILES(X86), COMMONPROGRAMW6432, COMPUTERNAME, COMSPEC, DEBUGFLAG, DEBUG_PORT, DEFLOGDIR, EC_COMPUTER_OU, EC_HOMEAPPDATA, EC_USER_DEPARTMENT, EC_USER_DG, EC_USER_DISPLAY_NAME, EC_USER_ELK, EC_USER_OU, EXTRA_JAVA_PROPERTIES, FP_NO_HOST_CHECK, GRADLE_HOME, HOMEDRIVE, HOMEPATH, HTTP.PROXYHOST, HTTP.PROXYPASSWORD, HTTP.PROXYPORT, HTTP.PROXYUSER, HTTPS.PROXYHOST, HTTPS.PROXYPASSWORD, HTTPS.PROXYPORT, HTTPS.PROXYUSER, HTTPS_PROXY, HTTP_PROXY, JAVA_HOME, JAVA_OPTS, LDMS_LOCAL_DIR, LOCALAPPDATA, LOCALRUNSETUP, LOGONSERVER, M2, M2_HOME, M2_REPO, MAVEN_OPTS, MW_HOME, MYPROXY, NO_PROXY, NUMBER_OF_PROCESSORS, ORACLE_BASE, ORACLE_HOME, OS, PATH, PATH2, PATHEXT, PROCESSOR_ARCHITECTURE, PROCESSOR_IDENTIFIER, PROCESSOR_LEVEL, PROCESSOR_REVISION, PROGRAMDATA, PROGRAMFILES, PROGRAMFILES(X86), PROGRAMW6432, PROMPT, PSMODULEPATH, PUBLIC, SBT_HOME, SESSIONNAME, SFT_SOFTGRIDSERVER, SYSTEMDRIVE, SYSTEMROOT, TEMP, TMP, USERDNSDOMAIN, USERDOMAIN, USERDOMAIN_ROAMINGPROFILE, USERNAME, USERPROFILE, UUMDS.CONFIG.LOCATION, UUMDS_CFG, VAGRANT_HOME, VBOX_MSI_INSTALL_PATH, VSEDEFLOGDIR, WINDIR, WINDOWS_TRACING_FLAGS, WINDOWS_TRACING_LOGFILE]

如果从 ma​​ven 执行:通知 HTTP.PROXYUSER testEnvironment=[=::, =C:, =EXITCODE, ALLUSERSPROFILE, APPDATA, APR_ICONV_PATH, CHOCOLATEYBINROOT, CHOCOLATEYINSTALL, CHOCOLATEY_BIN_ROOT, CLASSPATH, CLASSWORLDS_JAR, CLASSWORLDS_LAUNCHER, CLINK_DIR, COMMANDER_DRIVE, COMMANDER_EXE, COMMANDER_INI, COMMANDER_PATH, COMMONPROGRAMFILES, COMMONPROGRAMFILES(X86), COMMONPROGRAMW6432, COMPUTERNAME, COMSPEC, DEBUGFLAG, DEBUG_PORT, DEFLOGDIR, EC_COMPUTER_OU, EC_HOMEAPPDATA, EC_USER_DEPARTMENT, EC_USER_DG, EC_USER_DISPLAY_NAME, EC_USER_ELK, EC_USER_OU, ERROR_CODE, EXEC_DIR, EXTRA_JAVA_PROPERTIES, FP_NO_HOST_CHECK, GRADLE_HOME, HOME, HOMEDRIVE, HOMEPATH, HTTP.PROXYHOST, HTTP.PROXYPASSWORD, HTTP.PROXYPORT, HTTP.PROXYUSER, HTTPS.PROXYHOST, HTTPS.PROXYPASSWORD, HTTPS.PROXYPORT, HTTPS.PROXYUSER, HTTPS_PROXY, HTTP_PROXY, JAVA_HOME, JAVA_OPTS, LDMS_LOCAL_DIR, LOCALAPPDATA, LOCALRUNSETUP, LOGONSERVER, M2, M2_HOME, M2_REPO, MAVEN_CMD_LINE_ARGS, MAVEN_JAVA_EXE, MAVEN_OPTS, MAVEN_PROJECTBASEDIR, MW_HOME, MYPROXY, NO_PROXY, NUMBER_OF_PROCESSORS, ORACLE_BASE, ORACLE_HOME, OS, PATH, PATH2, PATHEXT, PROCESSOR_ARCHITECTURE, PROCESSOR_IDENTIFIER, PROCESSOR_LEVEL, PROCESSOR_REVISION, PROGRAMDATA, PROGRAMFILES, PROGRAMFILES(X86), PROGRAMW6432, PROMPT, PSMODULEPATH, PUBLIC, SBT_HOME, SESSIONNAME, SFT_SOFTGRIDSERVER, SYSTEMDRIVE, SYSTEMROOT, TEMP, TMP, USERDNSDOMAIN, USERDOMAIN, USERDOMAIN_ROAMINGPROFILE, USERNAME, USERPROFILE, UUMDS.CONFIG.LOCATION, UUMDS_CFG, VAGRANT_HOME, VBOX_MSI_INSTALL_PATH, VSEDEFLOGDIR, WDIR, WINDIR, WINDOWS_TRACING_FLAGS, WINDOWS_TRACING_LOGFILE]

我在这里发现了一个类似的问题:Uppercase vs. capitalized environment variable names during debug [message #242568],但没有任何答案。

我在 Windows 7 和 Eclipse v4.6 (Neon) 上使用 Java 8。

>java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

Eclipse Java EE IDE for Web Developers
Version: Neon Release (4.6.0)
Build id: 20160613-1800

> mvn -version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:57:37+02:00)
Maven home: C:\costin\apps\apache-maven-3.3.3
Java version: 1.8.0_77, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_77\jre
Default locale: en_GB, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

【问题讨论】:

  • 没有人拥有相同的订单。没有指定可以是随机的(至少在将来)。您使用相同的 VM 版本吗?
  • @PeterRader,我认为他指的是变量的情况,而不是订单本身。顺便说一句,好问题。
  • @XtremeBiker 是这样吗?这是一个糟糕的问题,因为grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/… 填充的哈希图是不同的。
  • 我期待看到不同的排序,这就是我对它们进行排序的原因。问题是我得到不同的环境变量,具体取决于我执行测试/主类的方式:通过从 Eclipse 菜单中选择:运行>运行方式>JUnit 测试或运行>调试方式>Junit 测试。
  • 即使是陌生人,也不只是大小写不同:ChocolateyBinRoot、CHOCOLATEY_BIN_ROOT、CHOCOLATEYBINROOT。

标签: java eclipse java-8 environment-variables


【解决方案1】:

您没有使用JPDA 进行调试。使用 JPDA,您会看到与 System 中使用的完全相同的 HashMap。您必须使用两个不同的 VM 执行,因为键的顺序不同,这不是 100% Java 调试。

在两个不同的进程中,您可以通过在环境变量之前使用系统属性来对执行进行不同的命名。

【讨论】:

  • 您从声称的密钥顺序差异中得出了奇怪的结论。首先,只要存在相同的键,顺序就没有不同。其次,顺序没有区别的原因是在print语句之前有一个显式的Collections.sort(keys)
  • 你说得对,我没有使用 JPDA 进行调试。我在eclipse中这样做。我执行测试类:通过从 Eclipse 菜单中选择:Run>Run As>JUnit Test 或 Run>Debug As>Junit Test。
  • @Holger 我真的认为uumds.config.location 的位置不对!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 2021-12-01
  • 2019-08-14
  • 2015-03-18
  • 2020-05-30
  • 2021-01-23
相关资源
最近更新 更多