使用 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 使用 .classpath
而 maven 使用 pom.xml
.
也许魔术可以通过以下方式完成:
getClass().getResource("/api/data.json");
或(基于用途)
getClass().getResourceAsStream("/api/data.json");
我正在尝试访问另一个目录外部我的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 使用 .classpath
而 maven 使用 pom.xml
.
也许魔术可以通过以下方式完成:
getClass().getResource("/api/data.json");
或(基于用途)
getClass().getResourceAsStream("/api/data.json");