Katie
Katie

Reputation: 48308

Add folder to classpath outside of java project using Maven

I am trying to access a file in another directory outside my java project.

The structure is like this:

.
|-- resources
|   |-- api
|   |   |-- data.json
|-- src
|   |-- java
|   |   |-- .classpath
|   |   |-- pom.xml
|   |   |-- src

My java project is located at ./src/java/

My resource directory is located at ./resources/api/

I have modified the .classpath of src/java/ like so:

<classpathentry kind="lib" path="./../../resources/api"/>

And I am trying to access the resource in the following ways:

String filename = "data.json";

     URL file_url = this.getClass().getClassLoader().getResource(filename);
     System.out.println("URL IS "+file_url);
     //outputs null

     file_url = this.getClass().getResource(filename);
     System.out.println("URL IS "+file_url);
     //outputs null

     InputStream in = this.getClass().getResourceAsStream(filename);
     System.out.println("InputStream IS "+in);
     //outputs null

     file_url = this.getClass().getResource("/api/"+filename);
     System.out.println("URL IS "+file_url);
    //outputs null

     file_url = this.getClass().getResource("api/"+filename);
     System.out.println("URL IS "+file_url);
    //outputs null

     file_url = this.getClass().getResource("resources/api/"+filename);
     System.out.println("URL IS "+file_url);
    //outputs null

     file_url = this.getClass().getResource("/resources/api/"+filename);
     System.out.println("URL IS "+file_url);
    //outputs null

     file_url = this.getClass().getResource("./"+filename);
     System.out.println("URL IS "+file_url);
    //outputs null

     file_url = this.getClass().getResource("/"+filename);
     System.out.println("URL IS "+file_url);

They are all returning null. Anyone see anything I did wrong here?

==========================

SOLUTION

Pretty silly, but I just needed to edit my Maven pom.xml to add the directory to the classpath, as instructed here.

I updated my pom.xml like this:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <additionalClasspathElements>
                <additionalClasspathElement>./../../resources/api/</additionalClasspathElement>
        </additionalClasspathElements>
    </configuration>
</plugin>

Apparently eclipse uses .classpath and maven uses pom.xml.

Upvotes: 1

Views: 2998

Answers (1)

GOXR3PLUS
GOXR3PLUS

Reputation: 7265

Maybe the magic can be done with:

getClass().getResource("/api/data.json");

or (based on the use)

 getClass().getResourceAsStream("/api/data.json");

Upvotes: 1

Related Questions