12

特定のディレクトリで Java プログラムを実行できるようにしたいと考えています。構成を簡単に管理できるため、作業ディレクトリをパラメーター化することは非常に便利だと思います。

たとえば、あるフォルダーにはテスト用の構成を入れ、別のフォルダーには本番用に必要なリソースを入れることができます。リソースを含めたり除外したりするためにクラスパスを操作するオプションがあると思うかもしれませんが、そのような解決策は、クラスパスに格納されているリソースに興味があり、 を使用してそれらを参照する場合にのみ機能しClassloader.getResource(r)ます。しかし、外部構成があり、次のような簡単な手順を使用してアクセスしたい場合はどうすればよいFile file = new File("app.properties");でしょうか?

通常の例を見てみましょう。

アプリケーションは、外部サービスの認証情報を保存するapp.propertiesファイルを使用します。File file = new File("app.properties");前述の命令を使用してアクセスするため、アプリケーションは作業ディレクトリでこのファイルを探します。テストでは、テストに固有のapp.propertiesを使用したいと考えています。統合テストでは、別の環境に固有のapp.propertiesを使用したいと考えています。最後に、アプリケーションをビルドしてリリースするときに、他のapp.propertiesファイルを提供する必要があります。File file = new File("app.properties");(疑似コード)の代わりに入力するだけで、常に同じ方法でアクセスしたいこれらすべてのリソース:

if(configTest) 
    file = File("testWorkDir/app.properties");
else if(config2) 
    file = File("config2WorkDir/app.properties");
else 
    file = File("app.properties");

または、クラスパスでリソースを使用する代わりに

this.getClass.getClassLoader.getResource("app.properties");

もちろん、あなたは賢いプログラマーであり、maven、gradle、sbt などのビルド ツールを使用します。:)

最初は十分です。少なくとも質問:

Java で作業ディレクトリを設定する方法はありますか。そうであれば、ビルド ツール (特に sbt) で設定する方法はありますか?

追加情報:

  • 「user.dir」システム プロパティの変更が機能しません (プログラムで変更しようとしました)。
  • sbtで、テスト用に baseDirectory 設定を介して「作業ディレクトリ」を変更すると、私の理解ではベースディレクトリではない baseDirectory が変更され、それは equal ではありませんnew java.io.File(".").getAbsolutePath
  • YOUR_APP_HOME のような環境変数を提供し、このパスからリソースを参照することは可能ですが、コードでこれについて覚えておく必要があります。
4

2 に答える 2

7

sbt で、テスト用に baseDirectory 設定を介して「作業ディレクトリ」を変更すると、私の理解ではベースディレクトリではない baseDirectory が変更され、それは equal ではありませんnew java.io.File(".").getAbsolutePath

上記のステートメントが何を意味するのかわかりませんが、sbt では、runまたはtest. これについては、フォークを有効にする および作業ディレクトリを変更する に記載されています。

于 2014-04-18T16:01:07.957 に答える