コードの起動方法に応じて、「user.dir」プロパティを読み取るときに、コードから一貫した結果が得られるという悪夢が少しありました。
私はgradleプロジェクト、いくつかのコードとスクリプトをsrc/main/groovyに、テストをsource/test/groovyに置き、コマンドラインからコードを実行するか、IDE(スクリプトを直接実行)でいくつかのテストを実行しています
私は新しいgradleプロジェクトを自分で構築し、src/main/resourcesでファイルリソースを開こうとしていました.
単体テストを実行すると、user.dir = 'project root' (これは私が期待していたものです) です。スクリプトを作成して IDE で右クリックすると、user.dir プロパティがソース メインの現在のスクリプト ディレクトリ パスを返しました。
そのため、テストのルックアップは別のテストを返しました。
これもbuild.gradleで設定してみました
//setup proj.dir as project root
System.setProperty( "proj.dir", project.projectDir.toString() )
これを印刷するgradleタスクをビルドすると、結果としてプロジェクトディレクトリが表示されます。
プロジェクトルートであるプロパティ「user.dir」を読み取るときに常に一貫したリターンを得るために、intellij のグローバルな「修正または構成」にはないようです。私が何かを見逃していない限り?
実行/デバッグ構成を見るとIDEで-デフォルトでは、groovyのエントリは、作業ディレクトリがプロジェクトルートであると言います(IDが期待するとおり)。ただし、groovy ノードとそこにあるスクリプト (「testPCE」) の下を見ると、作業ディレクトリがスクリプトの現在の場所として設定されていました。
IDE の実行 / デバッグ構成を編集できることがわかったら、作業ディレクトリをプロジェクト ルートにリセットし、一貫した結果が得られるようにしました。しかし、必要に応じて各スクリプトでこれを確認する必要があるようです。
だから私の質問は、コマンドラインの起動から、グラドルで、IDEからスクリプトを右クリックして実行するか、またはIDE/ またはコマンドラインから
コードの実行方法に関係なく、一部の環境変数のすべてのルックアップが同じ回答を返すことを保証する「堅牢な」方法が必要です。
何が起こっているかはわかっています。ide を調整して、作業ディレクトリをどこに置きたいかを設定できますが、確認を続ける必要があります。IDE、コマンド ライン、Tomcat Web コンテナー内など、「プロジェクト ルート」を取得し、この 1 つの安定したポイントから確実にパスを構築するなど、常に機能する信頼性の高いものが必要です。
誰もこれを行う方法を知っていますか?