IntelliJ - 为什么终端具有不同的环境变量值?

20

我最近将Java 7替换为Java 8。
在IntelliJ中,所有常规应用程序都可以顺利运行。
除了Tomcat应用程序 - 它们可以从命令行运行,但无法从IntelliJ运行。

由于JRE_HOME定义中存在错误,它无法加载。
我已经在环境变量和jdk设置中明确定义了JRE_HOME。
我已经执行了...

echo %jre_home%

在 IntelliJ 终端和 cmd 中都看到了不同的值(IntelliJ 终端显示未更新的值)。


这些变量在终端中是如何声明的?


我该如何修改它们?

9个回答

13

我不太了解旧版IntelliJ,但在2019.2.3版本中,可以在项目设置中配置环境变量。请注意,您需要重新启动现有的终端或创建新的终端选项卡以查看效果。

图片描述


谢谢,你节省了我的一些时间。 - Vijay Nandwana
这对于使用替代的ssh密钥与git非常方便。现在所有我的终端都有正确的设置,我甚至不需要考虑它。 - Christian Bongiorno

8

将近5年后,在Windows 10上我遇到了同样的问题,不得不重新启动电脑才能解决。

编辑: 最好的解决方案是不定义JRE_HOME环境变量。我不知道为什么,但IntelliJ在使用该环境变量时会卡住。


2
我也是一样。我可以确认在Windows 10上我不得不重新启动机器。重新启动IntelliJ IDEA没有任何效果... - Peter Wippermann
当Java/JRE通过Oracle安装程序等单独安装时,它会将JRE_HOME/jre设置到PATH中。 - Richard Day

8

如果您通过JetBrains ToolBox启动IntelliJ,它将缓存$PATH变量,因此最近的更改不会出现。

只需关闭并重新打开JetBrains Toolbox即可。


3

对我而言,这是因为IntelliJ IDEA没有将shell作为“登录”shell来启动。在登录shell中,我的所有环境变量都按照我期望的设置,但在非登录shell中,许多变量会丢失。

例如,我期望在我的PATH中有/usr/local/bin,但这只在登录shell中成立(当我运行iTerm2时获得)。下面摘自IntelliJ IDEA终端会话:

amacleod@valjean ~> echo $PATH | grep -c /usr/local/bin
0
(1) amacleod@valjean ~> $SHELL --login
Welcome to fish, the friendly interactive shell
amacleod@valjean ~> echo $PATH | grep -c /usr/local/bin
1

一种可能的解决方法是将我期望的PATH和其他变量添加到非登录shell的shell配置中,但我真的更希望始终处于登录shell中。

我本来希望IntelliJ IDEA在终端设置中有一个复选框用于发送--login。然而,可以覆盖Shell path设置以包括登录标志。 enter image description here


1

对于我来说,清除系统缓存或重启IntelliJ并没有重新加载更新的环境变量。

在重启计算机后,IntelliJ能够获取到更新的环境变量。


1
无效化系统缓存应该能解决问题。请参考JetBrains: 无效化缓存

其他措施(如关闭项目和IDE)似乎只在每个项目的基础上起作用,并且只有一段时间后(当IDE自行检测到缓存无效时...)。

编辑:
更正 - 不幸的是,在所有终端中纠正环境一段时间后,IntelliJ在我的任何项目中"恢复"到旧的、不正确的环境。现在我希望通过重新启动 - 如akuman8所发布的 - 问题得到解决。(如果没有,我将坚持使用自己选择的命令行界面IDE之外,那里一切都很好...)


1
  1. 关闭所有IntellJ窗口和可能正在使用错误SDK的任何进程。
  2. 导航到您安装JDK的文件夹(例如:C:\Program Files\Java)。
  3. 将错误的SDK重命名为其他名称(例如:jdk-11.0.5.OLD)。如果无法执行此操作,则可能仍有使用该SDK的进程运行;返回步骤1。
  4. 重新启动IntelliJ。

0
据我所知,Linux 上的 IntelliJ 终端只是运行独立终端会话的相同方式。它只是方便地位于 IDE 中。
针对问题“如何更改[终端环境变量]?”的回答:
我正在使用 virtualenvwrapper 来管理我的终端环境变量,以适应不同的环境,例如开发、测试和生产。它在 Java 开发中的表现与 Python 开发一样出色。

https://virtualenvwrapper.readthedocs.org


-2

据我所知,IJ使用操作系统的默认shell(对于Windows cmd.exe,您可以指定要使用的可执行文件)。因此,环境变量应与自己执行cmd.exe(或其他平台上适用的可执行文件)时相同。 - mish
这只是为了说明控件的位置。当然,您必须选择自己的运行/调试配置。 “删除它的引用”是什么意思? - mish
3
你混淆了。这些变量是为快速启动应用程序/运行任务等特定配置而设的,它们不反映终端中显示的内容。 - Darwin Allen
在我的Ubuntu 14.04 LTS上尝试了在Intellij 15.05中实现的此解决方案。它没有改变终端的环境变量。我的解决方案是:我使用virtualenvwrapper来管理我的终端环境变量,适用于不同的环境,对于Java和Python开发同样有效。https://virtualenvwrapper.readthedocs.org - Ed J
祝你好运,当你需要运行测试时,你将不得不手动设置变量每次运行不同的测试。 - Ben
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接