Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't access to files in resources directory with Maven (with Eclipse IDE)

Tags:

I have a problem for a couple of hours, and I tried all the solutions I've found on tutorials. It's simple: I can't access the resource files. I try to open a file I've put in src/main/resources and src/test/resources.

I have a simple Java project and I use Maven, with Eclipse as IDE, with the m2e plugin. I want to use resources filtering with Maven, with different profiles, and there's my 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> 

And I made a simple test, in src/java/test :

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

So, in Eclipse, I run (on my project folder, in the package view) :

  • Run as > Maven build > process-resources
  • Run as > Maven build > process-test-ressources
  • Run as > Maven build > compile

With env: LOCAL

In the test, I do: Run as > Junit Test Case. But it fail... I looked in target/test-classes directory generated by Maven, and the file test.txt is there.

Did I missed some steps during my project's compilation, or is there a problem with my configuration?

EDIT:
I tried with File("test.txt") and File("../test.txt") as well.

like image 672
Iraes Avatar asked Nov 11 '13 22:11

Iraes


People also ask

How do I read the properties file from the resources folder?

In Java, we can use getResourceAsStream or getResource to read a file or multiple files from a resources folder or root of the classpath. The getResourceAsStream method returns an InputStream . // the stream holding the file content InputStream is = getClass().


2 Answers

It looks to me like your problem is

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

That's looking for a file called test.txt at the root of your computer's filesystem. What you want is the root of the resource tree, which you get with the getResource method:

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

Or, in static context, use the name of the containing class:

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

Of course you'll need to add error handling to that example.

like image 108
Sam Hanes Avatar answered Oct 06 '22 00:10

Sam Hanes


Check your <build> tag in pom.xml it should be something like this, faced the same issue and adding this <resources> tag in the <build> worked for me.

<build>     <resources>         <resource>             <filtering>true</filtering>             <directory>src/main/resources</directory>         </resource>     </resources> </build> 
like image 35
Vandit Upadhyay Avatar answered Oct 06 '22 00:10

Vandit Upadhyay