2012-01-09 35 views
1

我已經配置執行者來檢查一些屬性。這些被導出爲我的主目錄中的.profile文件中的環境變量。從控制檯生成運行良好。intellij作爲不同的用戶運行maven嗎?

從intellij構建(雙擊maven菜單中的目標)失敗,因爲執行者無法找到屬性......這裏出了什麼問題以及如何解決它?

我的第一個猜測是,intellij作爲一個不同的用戶運行maven,但我不知道如何驗證它或如何處理它。

注:我不是要求解決方法。其中一個是在intellij的maven Runner設置中設置屬性,第二個 - 在/etc/profile中設置屬性。但我想避免它們。

編輯:我試過重新啓動intellij,X服務器和機器 - 對執行者沒有影響。 printenv在新鮮的控制檯顯示我的變量按預期。從同一個控制檯啓動intellij導致相同的構建失敗。

謝謝。

+0

我不相信有什麼辦法可以配置maven或任何其他插件或程序作爲IntelliJ中的其他用戶運行。 – 2012-01-09 13:36:00

+0

我以jenkins服務器爲例,它以詹金斯用戶的身份運行maven - 我找不到其他解釋 – kostja 2012-01-09 13:57:35

回答

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); 
    } 
} 
+0

謝謝你的答案。不幸的是,我已經嘗試過低掛水果 - 重啓intellij,x服務器或機器沒有任何影響。我不是手動導出變量,而是通過'.profile',因此所有應用程序的環境都應該是相同的。編輯了這個問題來反映這一點。 – kostja 2012-01-09 13:56:04

+0

在這種情況下,我會檢查從命令行運行的相同版本的maven做同樣的事情。 – 2012-01-09 13:58:19

+0

已經嘗試過 - 「從控制檯生成運行良好。」 Intellij使用與控制檯版本相同的二進制/ M2_HOME。 Jenkins也使用它,但對於CI,我使用injectEnv插件來避免更改全局配置文件 – kostja 2012-01-09 14:09:47

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時可以清理環境。

要測試,重命名mvnmvn.orig並創建一個新的腳本mvn與此內容:

#!/bin/bash 
set > $HOME/mvn_env.log 
mvn.orig "[email protected]" 

這個腳本轉儲環境爲mvn看到它$HOME/mvn_env.log。如果變量缺失,那麼IntelliJ將清理環境。

+0

嗯,有趣。我使用bash(稱'echo $ 0'),並在.profile中將變量設置在其他地方。它們在我重新啓動時設置,並且可用 - 使用'set','printenv','System.getenv()'進行檢查。我將它們遷移到.bashrc - 似乎沒有任何變化 – kostja 2012-01-09 16:15:54

+0

如果'set'可以看到它們,那麼IntelliJ也可以。唯一剩下的就是IntelliJ在啓動Maven時可以清理環境。查看我的編輯。 – 2012-01-11 08:28:28

相關問題