2013-02-05 36 views
12

我的Maven項目的pom.xml如下所示:的getClass()的getResourceAsStream()在Maven項目

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>groupId</groupId> 
    <artifactId>artifactId</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <build> 
    <sourceDirectory>src/main/java</sourceDirectory> 
    <resources> 
    <resource> 
    <directory>src/main/resources</directory> 
    </resource> 
    </resources> 
    </build> 
</project> 

在src/main/resources目錄我有一個名爲test的文件。 在src /主/ java目錄我有一個包含以下行的類:

System.out.println(this.getClass().getResourceAsStream("test")); 

當的代碼行是在Eclipse中運行,我得到的輸出

[email protected] 

當我出口項目爲.jar並運行它我得到輸出

null 

我配置了什麼錯?

+3

這個類是單元測試還是真正的生產類?我假設一個高產班。您必須將getResourcesAsStream(「test」)更改爲getResourcesAsStream(「/ test」); – khmarbaise

+0

@khmarbaise你是對的......但爲什麼它與Eclipse的工作? – ben75

+1

此測試資源位於* src/main/resources *文件夾中,還是位於* src/test/resources *文件夾中,包名或不包含?此外,您不需要配置* src/main/java *和* src/main/resources *文件夾,因爲它們是maven中的默認文件夾。 – khmarbaise

回答

2

我得到了這個錯誤,但通過谷歌搜索噸,我找不到解決方案。 所有的答案都對路徑,無人問津,它可以在Eclipse中運行,但無法在導出的jar文件:(

但現在我發現的解決方案,就這麼簡單: 在Eclipse中右鍵點擊你的Maven項目 - >屬性 - > Java構建路徑 - >源標籤

你可以看到像一棵樹:在Included (**/*.java)

MyProject/src 
    Ouput follder.. 
    Included (**/*.java) 
    Excluded 
    ... 

雙擊,刪除現有之一,所以它成爲Included (All) 現在出口的jar文件:)

5

<build><resources>請確保<include>如下 這將明確告訴maven獲取這些文件並將其包含在構建中。

<build> 
    <resources> 
     <resource> 
      <directory>${basedir}/src/main/resources</directory> 
      <includes> 
       <include>**/*</include> 
      </includes> 
     </resource> 
    </resources> 
    ... 
    </build> 
+0

我發現包含的語法工作是'**/*' –