数時間問題があり、チュートリアルで見つけたすべての解決策を試しました。簡単です:リソースファイルにアクセスできません。 _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で、私は(私のプロジェクトフォルダで、パッケージビューで)実行します:
Envを使用:LOCAL
テストでは、「実行」>「Junitテストケース」を実行します。しかし、失敗します... Mavenによって生成されたtarget/test-classesディレクトリを調べましたが、ファイルtest.txtがそこにあります。
プロジェクトのコンパイル中にいくつかの手順を逃しましたか、それとも構成に問題がありますか?
編集:File("test.txt")
とFile("../test.txt")
も試してみました。
あなたの問題は
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() );
もちろん、その例にエラー処理を追加する必要があります。
同じ問題が発生しました。「text.txt」ファイルが他のリソースフォルダーではなく、テストプロジェクトのリソースフォルダー(src/test/resources/text.txt)にあることを確認してください。また、次のようにリソースフォルダーからファイルを取得する必要があります。
this.getClass().getClassLoader().getResource("text.txt").getFile();
それでもうまくいかない場合は、maven-surefire-plugin
でpom.xml
のuseSystemClassLoader
をfalseに設定してみてください。
http://maven.Apache.org/surefire/maven-surefire-plugin/examples/class-loading.html
<build>
タグはpom.xmlでこのようなものでなければならず、同じ問題に直面し、これを追加します<resources>
タグの<build>
私のために働いた。
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
私はこの仕事のためにこの方法を作りました:
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;
}