[英]Does intellij run maven as a different user?
我已經配置了執行器以檢查某些屬性。 這些作為環境變量導出到我家的目錄中的.profile
文件中。 從控制台構建運行正常。
intellij的構建(雙擊maven菜單中的目標)失敗,因為執法者找不到屬性......這里出了什么問題以及如何修復它?
我的第一個猜測是intellij正在以不同的用戶身份運行maven,但我不確定如何驗證它或如何處理它。
注意:我不是在尋求解決方法。 一種是在intellij的maven Runner設置中設置屬性,第二種是在/etc/profile
設置屬性。 但我想避免它們。
編輯 :我試圖重新啟動intellij,X服務器和計算機-對強制程序沒有影響。 全新控制台中的printenv
按預期顯示了我的變量。 從同一控制台啟動intellij會導致相同的構建失敗。
謝謝。
每個程序都有自己的環境。 如果更改.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);
}
}
.profile
僅在您使用KSH登錄時執行。 如果使用BASH,則無效。
.bashrc
(如果你使用BASH)是一個更合適的地方,因為它是每次你啟動一個shell(shell腳本,新的終端窗口等)時執行的。
對於KSH, .kshrc
具有相同的效果 。
要確保變量存在,請使用set
(無選項)列出所有變量或使用set|grep
模式進行搜索。 一旦它們出現在新的終端窗口中,它們也應該從IDE內部出現。
[編輯]如果set
可以看到它們,IntelliJ也可以。 唯一剩下的就是IntelliJ可以在啟動Maven時清理環境。
要進行測試, mvn.orig
mvn
重命名為mvn.orig
並創建一個具有以下內容的新腳本mvn
:
#!/bin/bash
set > $HOME/mvn_env.log
mvn.orig "$@"
此腳本將mvn
看到的環境轉儲到$HOME/mvn_env.log
。 如果缺少變量,則IntelliJ會清除環境。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.