【问题标题】:System.getenv() only works properly when debugging IntelliJ pluginSystem.getenv() 仅在调试 IntelliJ 插件时才能正常工作
【发布时间】:2014-10-12 00:16:47
【问题描述】:

我正在运行 IntelliJ 13(在 OS X Yosemite 上)并试图让 Go IDEA plugin 工作。当我调试应用程序以尝试找出问题所在时,我发现由于某种原因,运行的从属 IDEA 可以很好地适应我的环境。

通常在尝试运行任何涉及go 实用程序的程序时,都会引发异常。该插件将通过使用环境变量执行go <args> 来执行命令:

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(command, goEnv, new File(projectDir));

如果我将go 命令更改为go 二进制文件的完整路径,一切正常。但是,在调试时,我不必更改路径,它仍然可以成功。

插件有一个action which prints out the environment,它调用System.getenv()

GoToolWindow toolWindow = this.getGoToolWindow(project);
toolWindow.showAndCreate(project);
toolWindow.clearConsoleView();

String[] sysEnv = GoSdkUtil.convertEnvMapToArray(System.getenv());


toolWindow.printNormalMessage(String.format("%s -> %s%n", "Project dir", projectDir));
for (String env : sysEnv) {
    toolWindow.printNormalMessage(String.format("%s%n", env));
}

正常运行IDEA时,输出如下:

Project dir -> /Users/lander/Development/downloader
SHELL=/bin/zsh
TMPDIR=/var/folders/6y/xxqr1vqn6q7c_ttvdgjt7p1w0000gn/T/
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
PATH=/usr/bin:/bin:/usr/sbin:/sbin
XPC_FLAGS=0x0
USER=lander
HOME=/Users/lander
XPC_SERVICE_NAME=com.jetbrains.intellij.43484
LOGNAME=lander
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.tV9zH4QXK4/Render
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BCyPknIo2V/Listeners

以及调试插件时:

Project dir -> /Users/lander/IdeaProjects/gotest
ZSH=/Users/lander/.oh-my-zsh
com.apple.java.jvmMode=client
GREP_OPTIONS=--color=auto --exclude-dir=.cvs --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
GOROOT=/usr/local/opt/go/libexec
XPC_FLAGS=0x0
JAVA_MAIN_CLASS_14389=com.intellij.idea.Main
LOGNAME=lander
GREP_COLOR=1;32
ZSH_TMUX_TERM=screen
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BCyPknIo2V/Listeners
OLDPWD=/Applications/IntelliJ IDEA 13.app/Contents/bin
SHELL=/bin/zsh
LC_CTYPE=
TMPDIR=/var/folders/6y/xxqr1vqn6q7c_ttvdgjt7p1w0000gn/T/
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/texbin:/Users/lander/go/bin
VERSIONER_PYTHON_VERSION=2.7
GOPATH=/Users/lander/go
LESS=-R
USER=lander
com.apple.java.jvmTask=CommandLine_Manual.java
ZSH_TMUX_AUTOSTARTED=true
PAGER=less
HOME=/Users/lander
XPC_SERVICE_NAME=0
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.tV9zH4QXK4/Render
LSCOLORS=Gxfxcxdxbxegedabagacad
_ZSH_TMUX_FIXED_CONFIG=/Users/lander/.oh-my-zsh/plugins/tmux/tmux.extra.conf
VERSIONER_PYTHON_PREFER_32_BIT=no

造成差异的原因是什么?

【问题讨论】:

    标签: java macos intellij-idea


    【解决方案1】:

    根据JetBrains employee,这是因为从属实例是在运行的外部脚本给定的环境下启动的。父进程中的插件不应调用System.getenv(),而应使用EnvironmentUtil

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2016-11-04
      • 2016-11-08
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多