使用 Maven 将文件夹添加到 java 项目之外的类路径

Add folder to classpath outside of java project using Maven

我正在尝试访问另一个目录外部我的java项目中的文件。

结构是这样的:

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

我的java项目位于./src/java/

我的资源目录位于./resources/api/

我已经修改了 src/java/.classpath 像这样:

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

我正在尝试通过以下方式访问资源:

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);

他们都回来了null。有人看到我在这里做错了什么吗?

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

解决方案

非常愚蠢,但我只需要按照说明 here.

编辑我的 Maven pom.xml 以将目录添加到类路径中

我这样更新了我的 pom.xml:

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

显然 eclipse 使用 .classpathmaven 使用 pom.xml.

也许魔术可以通过以下方式完成:

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

或(基于用途)

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