intellij是否以不同的用户身份运行maven?

时间:2012-01-09 11:43:58

标签: java maven intellij-idea environment-variables

我已将执行程序配置为检查某些属性。这些作为环境变量导出到我家的目录中的.profile文件中。从控制台构建运行正常。

intellij的构建(双击maven菜单中的目标)失败,因为执法者无法找到属性......这里出了什么问题以及如何修复它?

我的第一个猜测是intellij正在以不同的用户身份运行maven,但我不确定如何验证它或如何处理它。

注意:我不是要求解决方法。一种是在intellij的maven Runner设置中设置属性,第二种 - 在/etc/profile中设置属性。但我想避免它们。

编辑:我尝试重启intellij,X服务器和机器 - 对执行器没有影响。新控制台中的printenv按预期显示我的变量。从同一控制台启动intellij会导致相同的构建失败。

谢谢。

2 个答案:

答案 0 :(得分:2)

每个程序都有自己的环境。如果更改.profile之类的环境设置,则不会更改运行程序的设置。当一个程序运行另一个程序时,它继承其父程序的设置/环境。它不会再次加载设置。

您可能会发现,IntelliJ启动后所做的更改对IntelliJ运行的程序没有任何影响。如果您打开命令窗口,更改设置并运行新程序(shell将保留启动时的设置),也会发生同样的事情。要修复此问题,您需要重新启动IntelliJ。如果从命令行运行它,请确保它是一个新窗口。


此单元测试应该转储环境。

@Test
public void dumpEnv() {
    for (Map.Entry<String, String> entry : new TreeMap<String, String>(System.getenv()).entrySet()) {
        System.out.println(entry);
    }
}

答案 1 :(得分:1)

.profile仅在您使用KSH登录时执行。如果您使用BASH,则无效。

.bashrc (if you use BASH)是一个更适合的地方,因为每次启动shell时都会执行它(shell脚本,新的终端窗口等)。

对于KSH,.kshrc has the same effect

要确保变量存在,请使用set(无选项)列出所有变量,或使用set|grep 模式进行搜索。一旦它们出现在新的终端窗口中,它们也应该从IDE内部出现。

[编辑] 如果set可以看到它们,那么IntelliJ也可以。唯一剩下的就是IntelliJ可以在启动Maven时清理环境。

要对此进行测试,请将mvn重命名为mvn.orig并使用以下内容创建新脚本mvn

#!/bin/bash
set > $HOME/mvn_env.log
mvn.orig "$@"

此脚本会在mvn将其视为$HOME/mvn_env.log时转储环境。如果缺少变量,则IntelliJ会清除环境。