2011-08-20 71 views
0

我有一個testng類,它測試一個類,然後從類路徑加載屬性。當我運行maven安裝我得到一個錯誤提及文件未找到。它不能找到屬性文件,雖然我在src/test/resources。如何解決這個問題?加載屬性文件爲maven-surefire-plugin

的Java代碼具有嘗試加載屬性文件Properties props = JobUtils .loadProperties("x.properties");構造我的Maven配置:


<plugin> 
    <groupId>org.apache.maven.plugins 
    <artifactId>maven-surefire-plugin 
    <version>2.5 
    <configuration> 
    <skipTests>false</skipTests> 
    </configuration> 
</plugin> 

有:


<build> 
    <testResources> 
    <testResource> 
     <directory>src/test/resources</directory> 
     <filtering>false</filtering> 
    </testResource> 
    </testResources> 
</build> 

我也有這個x.propertiessrc/test/resource

運行TestSuite的堆棧跟蹤是:


java.io.FileNotFoundException: x.properties (The system cannot find the file specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.(FileInputStream.java:106) 
    at java.io.FileInputStream.(FileInputStream.java:66) 

另請注意,測試類我嘗試實例化此Java代碼並進行測試。

+0

您能否提供更多信息,因爲它不足以幫助您? 'mvn test'能正常工作嗎?屬性文件是某種環境/配置文件配置的一部分嗎?你能發佈試圖加載屬性文件的堆棧跟蹤和代碼嗎? – Augusto

+0

java代碼有一個構造函數,它嘗試加載屬性文件屬性props = JobUtils \t \t \t \t .loadProperties(「x.properties」);我的Maven配置 org.apache.maven.plugins Maven的萬無一失,插件 2。5 <結構> Siva

+0

與構建 的src /測試/資源 另外我在src/test/resource中有這個x.properties堆棧跟蹤運行TestSuite java.io.FileNotFoundException:x.properties(系統不能fin d指定的文件) 位於java.io.FileInputStream.open(本機方法) 位於java.io.FileInputStream。 (FileInputStream.java:106) at java.io.FileInputStream。 (FileInputStream.java:66) – Siva

回答

2

在執行Maven process-test-resources階段後,您的x.properties文件從src/test/resources目錄實際上被複制到target/test-classes目錄。所以,如果你希望你的應用程序能夠找到它,你應該使用下列文件路徑:


Properties props = JobUtils .loadProperties("target/test-classes/x.properties"); 

不過,我不認爲這是你在尋找什麼。我建議使用這樣的代碼來讀取直接從CLASSPATH屬性文件(不直接使用文件系統):


InputStream is = getClass().getResourceAsStream("/x.properties"); 
Properties p = new Properties(); 
try { 
    p.load(is); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    if (is != null) { 
    try { 
     is.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

使用這種方法,你就可以加載屬性文件,甚至從一個JAR中文件分發給客戶,也可以從配置文件中添加到某種啓動腳本的CLASSPATH中。

+0

感謝它幫助 – Siva

1

我有一個文件沒有找到相同的問題。然而,當我在命令行運行mvn測試時,我發現maven發現它可以使用。只是我的Eclipse IDE告訴我它找不到它。當我將我的IDE目錄src/test/resources更改爲「源目錄」時,我的IDE也沒有問題。