2012-01-09 9 views
1

いくつかのプロパティをチェックするようにエンフォーサを設定しました。これらは私の家のディレクトリの私の.profileファイルの環境変数としてエクスポートされます。コンソールからのビルドは正常に動作します。intellijは別のユーザーとしてmavenを実行しますか?

エンフォーサがプロパティを見つけることができないため、intellij(ビルドメニューの目標をダブルクリック)からのビルドが失敗しました...ここで何が問題になり、それを修正するのですか?

私の最初の推測は、intellijが別のユーザーとしてmavenを実行していますが、私はそれを確認する方法や何をするべきかわかりません。

注:私は回避策を求めていません。 1つは、intelijのMavenランナー設定でプロパティを設定すること、もう1つは、プロパティを/etc/profileに設定することです。しかし、私はそれらを避けたいです。

EDIT:私はintellij、Xサーバー、マシンを再起動してみましたが、執行者には影響しません。新しいコンソールのprintenvは私の変数を期待どおりに表示します。同じコンソールからintellijを起動すると、同じビルドに失敗します。

ありがとうございます。

+0

私は、Mavenやその他のプラグインやプログラムをIntelliJの別のユーザーとして実行するように設定する方法はないと思います。 –

+0

jenkinsユーザーとしてmavenを実行するjenkinsサーバーと同様に仮定しました。他の説明は見つかりませんでした。 – kostja

答えて

2

各プログラムにはそれぞれ独自の環境があります。 .profileなどの環境設定を変更しても、実行中のプログラムの設定は変更されません。あるプログラムが別のプログラムを実行すると、そのプログラムはその親の設定/環境を継承します。設定を再度ロードしません。

IntelliJの起動後に行った変更は、IntelliJが動作するプログラムから影響を受けていないことがわかります。コマンドウィンドウを開き、設定を変更して新しいプログラムを実行すると、同じことが起こります(シェルは起動時の設定を保持します)。これを修正するには、IntelliJを再起動する必要があります。コマンドラインから実行する場合は、新しいウィンドウを確認してください。


このユニットテストでは、環境をダンプする必要があります。

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

ありがとうございました。残念なことに、私はすでに低ぶら下がっている果物を試しています - インテリジェントを再起動すると、xサーバまたはマシンは効果がありません。変数を手動でエクスポートするのではなく、私の '.profile'を通してエクスポートするので、環境はすべてのアプリケーションで同じにする必要があります。これを再考するために質問を編集しました。 – kostja

+0

その場合、コマンドラインから実行される同じバージョンのmavenが同じことをチェックします。 –

+0

がこれを試みました - 「コンソールからのビルドはうまく動作します。 Intellijはコンソールビルドと同じバイナリ/ M2_HOMEを使用します。 Jenkinsもそれを使用しますが、CIの場合は、injectEnvプラグインを使用してグローバルプロファイルを変更しないようにします。 – kostja

1

.profileは、KSHを使用してログオンするときにのみ実行されます。 BASHを使用しても効果はありません。

.bashrc (if you use BASH)は、シェル(シェルスクリプト、新しい端末ウィンドウなど)を起動するたびに実行されるため、はるかに適した場所です。

KSHについては、.kshrc has the same effectです。

検索するそれらのすべてまたはset|grepパターンをリストするset(はオプション)を使用し、変数があることを確認します。彼らは新しい端末ウィンドウに表示されるとすぐに、IDEの内部からそこにいるはずです。

[編集]setが表示されている場合は、IntelliJも表示されます。残っている唯一のことは、Mavenを起動するときにIntelliJが環境をきれいにすることができることです。

、それをテストmvn.origmvnの名前を変更し、このコンテンツを新しいスクリプトmvnを作成するには:mvn$HOME/mvn_env.logにそれを見ているよう

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

このスクリプトは、環境をダンプします。変数がない場合、IntelliJは環境をクリーンアップします。

+0

うーん、興味深い。私はbash( 'echo $ 0'と言っています)を使用していて、.profile以外の場所に変数を設定しています。再起動時に設定され、 'set'、' printenv'、 'System.getenv() 'でチェックされます。私はそれらを.bashrcに移行しました - 何も変更していないようです – kostja

+0

'set'がそれらを見ることができるなら、IntelliJもそうすることができます。残っている唯一のことは、Mavenを起動するときにIntelliJが環境をきれいにすることができることです。私の編集を参照してください。 –

関連する問題