2016-10-18 101 views
0

我正在嘗試訪問另一個目錄中的文件外部我的java項目使用Maven將文件夾添加到Java項目之外的類路徑

的結構是這樣的:

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

Java項目位於./src/java/

資源目錄位於./resources/api/

我已經修改的像這樣:

<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。任何人看到我在這裏做錯了什麼?

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

SOLUTION

非常愚蠢的,但我只需要修改我的Maven pom.xml將該目錄添加到類路徑中,如指示here

我更新了我的pom.xml這樣的:

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

顯然日食使用.classpath行家使用pom.xml

+0

如果你正在使用Maven,爲您的生產源文件夾應該是'SRC/main/java',而不是'src/java',如你的問題所示。 – JimHawkins

回答

1

也許魔法是可以做到的:

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

或(基於使用)

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

仍然返回null:/我用添加的測試更新了我的問題。我認爲如何將「resource/api」添加到類路徑中存在問題,因爲我認爲如果它在類路徑中存在,則此策略將起作用 – Kayvar

+0

@Kayvar您正在使用哪個「IDE」? – GOXR3PLUS

+1

我正在使用maven構建,只是意識到它可能不使用'.classpath' ..大聲笑哎呀!現在工作!我添加了類路徑的東西到我的pom.xml – Kayvar

相關問題