web-dev-qa-db-ja.com

Mavenを使用してリソースディレクトリ内のファイルにアクセスできない(Eclipse IDEを使用)

数時間問題があり、チュートリアルで見つけたすべての解決策を試しました。簡単です:リソースファイルにアクセスできません。 _src/main/resources_と_src/test/resources_に入れたファイルを開こうとしました。

私は簡単なJavaプロジェクトであり、MavenをIDEとしてEclipse、m2eプラグインとともに使用します。Mavenでリソースフィルタリングを使用し、異なるプロファイルで、_POM.xml_:

_<build>
  <plugins>
    <plugin>
      <groupId>org.Apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.3.2</version>
      <configuration>
    <source>1.5</source>
    <target>1.5</target>
    <debug>false</debug>
    <optimize>true</optimize>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.Apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.4</version>
      <configuration>
    <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
  </plugins>

  <filters>
    <filter>src/main/filters/${env}.properties</filter>
  </filters>

  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
    <resource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

<profiles>
  <profile>
    <id>LOCAL</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <env>local</env>
    </properties>
      </profile>
</profiles>
_

そして、src/Java/testで簡単なテストを行いました。

_@Test
public void testOpenResourceFile() {
    File testf=new File("/test.txt");
    assertTrue(testf.exists());
}
_

だから、Eclipseで、私は(私のプロジェクトフォルダで、パッケージビューで)実行します:

  • 実行> Mavenビルド>プロセスリソース
  • 実行> Mavenビルド> process-test-ressources
  • 実行> Mavenビルド>コンパイル

Envを使用:LOCAL

テストでは、「実行」>「Junitテストケース」を実行します。しかし、失敗します... Mavenによって生成されたtarget/test-classesディレクトリを調べましたが、ファイルtest.txtがそこにあります。

プロジェクトのコンパイル中にいくつかの手順を逃しましたか、それとも構成に問題がありますか?

編集:
File("test.txt")File("../test.txt")も試してみました。

22
Iraes

あなたの問題は

File testf = new File( "/test.txt" );

コンピューターのファイルシステムのルートにあるtest.txtというファイルを探しています。必要なのは getResource メソッドで取得するリソースツリーのルートです。

File testf = new File( this.getClass().getResource( "/test.txt" ).toURI() );

または、静的コンテキストでは、包含クラスの名前を使用します。

File testf = new File( MyClass.class.getResource( "/test.txt" ).toURI() );

もちろん、その例にエラー処理を追加する必要があります。

41
Sam Hanes

同じ問題が発生しました。「text.txt」ファイルが他のリソースフォルダーではなく、テストプロジェクトのリソースフォルダー(src/test/resources/text.txt)にあることを確認してください。また、次のようにリソースフォルダーからファイルを取得する必要があります。

this.getClass().getClassLoader().getResource("text.txt").getFile();

それでもうまくいかない場合は、maven-surefire-pluginpom.xmluseSystemClassLoaderをfalseに設定してみてください。

http://maven.Apache.org/surefire/maven-surefire-plugin/examples/class-loading.html

5
Marco

<build>タグはpom.xmlでこのようなものでなければならず、同じ問題に直面し、これを追加します<resources>タグの<build>私のために働いた。

<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>
3
Vandit Upadhyay

私はこの仕事のためにこの方法を作りました:

public static String getPropaccess(String key){
    String value="";
    Properties configFile = new Properties();
    try {
        configFile.load(Propaccess.class.getClassLoader().getResourceAsStream("test/resources/config.properties"));
        value = configFile.getProperty(key);
        return value;
    } catch (IOException e) { 
        e.printStackTrace();
    }
    return value;
}
0