0

Mavenの助けを借りて開発されたJavaプロジェクトがあります。プロジェクトの一部は単体テストです。単体テストによって生成されるすべての一時ファイルを Maven のターゲット ディレクトリに配置する予定です。何らかの理由で単体テストによって一時ファイルが削除されない場合、ターゲットディレクトリが消去され、すべての一時ファイルがファイルシステムに残っている可能性があるため、これは良い考えかもしれません。そこで、maven リソース プラグインのフィルタリング機能を見つけて、ユースケース用にインスタンス化できるかどうか疑問に思っていました。私の計画は、このようなプロパティファイルにエントリを持つことです

targetdir = ${project.build.directory}

これにより、mavens ターゲット ディレクトリの場所を明らかにするプロパティが提供されるはずです。さて、警告は、フィルタリングされたプロパティ ファイルが maven リソース プラグインによってターゲット ディレクトリに格納されることです。
どうすればそこを見つけることができますか? ターゲット・ディレクトリーがどこにあるかを教えてくれるプロパティー・ファイルが必要ですが、プロパティー・ファイルはターゲット・ディレクトリーにありますか? 私のアプローチはまだ実行する価値がありますか? それともこのままでは無理ですか?

4

1 に答える 1

1

私には2つの方法があります:

1. Java Magic を使用する
ここでは、トリックを実行しました

@Test
public void testpath(){
    //gets me surefire report dir, lies just below /target
    File testDir = new File(TestTargetPath.class.getResource("/").getPath());
    //Get its parent! location of target
    System.out.println("target? " + testDir.getParent());

    //modify your properties object to set this as targetDir
}

これは印刷します

 target? /home/naishe/workspace/in/naishe/homeapp/target

2. 相対パスを使用して構成ファイルをリソースとして読み取ります

Maven レイアウトでは、構成プロパティなどのリソース ファイルを配置する場所が 2 つあります。

  1. /src/main/resources-- この下のファイルはアーティファクトの一部になります。getResource()以下の任意のクラスから使用してアクセスできます/src/main/java

  2. /src/test/resources-- この下のファイルはアーティファクトの一部にはなりませ/src/test/javaが、どのクラスからでも利用できます。

したがって、必要に応じて、config.properties1 つまたは両方の場所を保持し、次を使用して構成ファイルを読み取ることができます。

    Properties props = new Properties();
    InputStream stream = AppConfig.class.getResourceAsStream("/config.properties");
    props.load(stream);
    System.out.println(">> " + props.getProperty("targetDir"));
于 2012-08-30T08:53:36.337 に答える