从IntelliJ IDEA运行时,为什么环境变量始终为空(仅)Gradle?

dop*_*umi 7 intellij-idea gradle intellij-14

我在gradle中编写了一个抓取环境变量的任务.

task run(type:Exec) {
    def SYS_ENV = System.getenv("SYSTEM_ENV")
    // do something with SYS_ENV 
}
Run Code Online (Sandbox Code Playgroud)

如果我运行这个任务./gradlew :taskName一切都很好,但如果我从IntelliJ IDEA运行相同的任务,(与https://www.jetbrains.com/img/webhelp/run.png按钮,或从gradle面板)env变量出来null.

我尝试重启IntelliJ,我也尝试了Invalidate Caches/Restart选项,但没有任何改变.

是不是IntelliJ IDEA应该运行Gradle脚本,就像我从命令运行它一样?如何从Grade中获取env变量,以便在运行IntelliJ时脚本不会失败?

编辑:我做了一堆试验,我可以做lanchctl setenv MY_PATH MY_VALUE 工作,但它不是永久性的,并且添加setenv MY_PATH MY_VALUE/etc/lanchd.conf 不会这样做.

小智 0

这是一个相对较旧的问题,但以下内容对我在 Yosemite (10.10) 上有效,因此在这里回答以防其他人遇到问题。

launchd.conf对Yosemite的支持已被删除。LaunchAgents 可用于 OSX 中启动每个用户的进程。您可以使用这些来重新运行launchctl问题中的步骤,有效地保留环境变量

  1. 创建一个用户启动代理来设置变量(编辑环境变量并在终端窗口中运行以下命令)

    cat << EOF > ~/Library/LaunchAgents/user.environment.plist
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
      <dict>
        <key>Label</key>
        <string>user.environment</string>
        <key>ProgramArguments</key>
        <array>
          <string>sh</string>
          <string>-c</string>
          <string>launchctl setenv MYPATH MY_VALUE</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
      </dict>
    </plist>
    EOF
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重新启动你的Mac

  3. 确保重新启动所有打开的应用程序(例如 IntelliJ)。仅重新启动对我来说不起作用,我需要关闭并重新启动应用程序。

参考