在 IntelliJ 中强制重新加载环境变量...而不重新启动?

Posted

技术标签:

【中文标题】在 IntelliJ 中强制重新加载环境变量...而不重新启动?【英文标题】:Force reload of environment variables in IntelliJ... without restarting? 【发布时间】:2013-11-03 02:58:14 【问题描述】:

标题说明了一切。

我已经修改了一个在我的 java 项目中使用的环境变量,例如,我的 pom.xml 中的这一行:

<url>$env.DB_CONNECTION_URL</url>

要使此更改生效,我必须手动重新启动 IntelliJ。

有趣的是,我安装了一个 IntelliJ 插件来“重新启动”IntelliJ,它确实如此,但环境变量没有刷新。

有没有办法做到这一点,而无需重新启动?

【问题讨论】:

也许这值得写一个插件?只是为了将环境变量刷新到当前的intellij会话中……关闭所有intellij窗口并重新启动真是太痛苦了。 【参考方案1】:

如果您通过“JetBrains Toolbox”启动 IntelliJ,那么为了重新加载环境变量,您需要关闭它们(IntelliJ 和 Toolbox),启动工具箱,然后通过工具箱启动 IntelliJ。

【讨论】:

能否详细说明如何关闭工具箱? @vikingsteve RIGHT_CLICK 在系统托盘图标上,然后选择退出。 我不知道工具箱的存在。感谢您的提醒! ... 如果 IntelliJ 是我使用的唯一 Jetbrains 产品,使用该工具箱有什么好处吗? @vikingsteve 该工具箱将允许自动更新。【参考方案2】:

不可能。一旦在 Windows 或 Unix 中启动进程,就无法从外部读取更新的环境变量。您只能更改进程内的环境变量。

这个 IntelliJ 插件可能不会完全重新启动应用程序,而是使用不同的类加载器。

【讨论】:

好的,谢谢。最好有一个 IntelliJ 重启选项,它可能会产生一个新的操作系统进程并在其中重启 IntelliJ。但现在我明白了原因,我会接受手动重启:) 可能会将其放入默认未启用的 Maven 配置文件中并在那里更改它可以简化测试过程... 对于 Windows 10,命令提示符具有执行此操作的“refreshenv”命令,因此现在在技术上是可行的。 如前所述,“您只能更改进程内的环境变量” - 因此您可以重新读取路径之类的环境并为您的进程更改它,例如您正在调试的程序,或者更改环境选项您开始了一些新进程,而不仅仅是在 Windows 10 中。【参考方案3】:

有一种方法可以在不重新启动 IDE 的情况下通过在 IDE 中创建一个新的本地终端来完成这项工作。

    在IDE终端点击右键 点击新建会话

这在 Pycharm 中对我有用,并且使用新路径重新加载了环境变量

【讨论】:

这只会更新终端的环境变量,而不是 IntelliJ 本身。【参考方案4】:

似乎 Intellij 缓存了这些验证,甚至重新启动。在我的情况下,在 Windows 上重新登录后,Vars 已刷新。不确定它在 Linux/Mac Os 上是否也一样,但我在 Windows 上通过访问 文件 -> 设置 -> 构建、执行、开发 -> 构建工具 -> Maven -> Runner。 然后单击环境变量文本框中的小文档图标。现在,当包括系统环境变量被勾选时,我可以修改相关变量,或者我可以添加一个到用户环境变量。 IntelliJ 立即使用它们而无需重新启动/重新加载/重新记录

喜欢这里

【讨论】:

【参考方案5】:

在 Intellij 启动后更新环境变量后,您将无法在 Intellij 中加载最新值。

以下是我的解决方案 FYR:

    退出 Intellij 打开一个新终端,确保有最新更新的环境变量 在命令行中从这个终端启动 Intellij,例如,idea 检查 Intellij 中的环境变量

顺便说一句,要在 Maven 运行中使用 env var,请按照以下步骤操作:

运行 -> 编辑配置... -> 你的 maven 运行 -> Runner -> 环境变量:-> 包括系统环境变量:

祝你好运~

【讨论】:

问题具体说“无需重启”,所以你的解决方案其实不是解决方案【参考方案6】:

在 Linux/UNIX 中,shell 可能可以通过以下方式获取配置文件: . /etc/profile 在不退出当前 shell 的情况下刷新 env。

【讨论】:

这行不通,因为 IntelliJ 在启动后不会获取对环境变量的任何更改。

以上是关于在 IntelliJ 中强制重新加载环境变量...而不重新启动?的主要内容,如果未能解决你的问题,请参考以下文章

跨内核线程迁移后是不是可以强制重新加载 thread_local 变量?

强制 Intellij IDEA 重新读取所有 maven 依赖项

部署后如何强制客户端重新加载?

使用 Intellij IDEA 重新加载远程 Spring Boot 应用程序时出现异常

使用 SpringBoot devtools 在“构建项目”IntellIJ 上重新加载前端

IntelliJ 中的调试(重新加载更改的类)