2012-12-15 77 views
0

我正在使用maven構建一個多語言網站。MissingResourceException - 在maven集成測試階段未找到包

屬性文件存儲在/ src目錄/主/資源

在建設階段由行家所產生的戰爭包含WEB-INF/classes中的* .properties文件。如果我將這個war文件部署到生產環境中,則不會引發MissingResourceException。

所以一切工作正常,除了有這個MissingResourceException的集成測試。順便說一下集成測試由於失敗保護-maven-plugin而執行。

那麼在集成測試階段出現了什麼問題?

真正奇怪的是,我可以在集成測試期間加載另一個屬性文件(不適用於I18N目的)。唯一的區別是我使用FileReader而不是使用ResourceBundle.getBundle。

我錯過了什麼嗎?

在此先感謝您的幫助。

回答

0

確定的問題是 「公正」 的基本部分我用來獲取包:

ResourceBundle.getBundle( 「/ MyBundle」);

代替

ResourceBundle.getBundle( 「MyBundle」);

然而,這是一個奇怪的行爲,因爲第一行代碼在部署.war時運行良好,但在集成測試期間不會運行。如果有人知道爲什麼,我真的很感興趣的答案!

+0

我想你已經倒退了... ResourceBundle.getBundle(「MyBundle」); <--- works ResourceBundle.getBundle(「/ MyBundle」); <---不起作用 – jcampos8782

1

使用FileReader無法設置字符編碼。更好地使用new InputStreamReader(new FileInputStream(file), "ISO-8859-1"),這是明確的,與操作系統無關。而ISO-8859-1是屬性的標準編碼(醜陋)。

此外還應該找到/ src/test/resources/src/main/resources。

你檢查/目標/課程?

複製階段可能存在錯誤(準備資源,準備測試資源等)。 也許是一個相對類別getClass().getResourceAsStream(relativePath)

+0

感謝您的回覆。回答你的問題:I18N文件在/ target/classes中,我不使用類似getClass()。getResourceAsStream(relativePath)我使用ResourceBundle.getBundle(「baseName」)。我不明白的是,我們有測試階段(maven-surefire-plugin),然後是打包階段(maven-war-plugin),然後是應該使用戰爭的集成測試階段(failsafe-maven-plugin)文件生成之前(這個戰爭文件,在生產中工作),如果我檢查它的I18N文件是在。我在錯誤的maven過程? – Manu

+0

似乎沒關係(對我而言);看一下'.m2'的maven倉庫;用7zip/WinZip檢查這場戰爭。 –

+0

我剛剛檢查過〜/ .m2/repository中的war,並且缺少I18N屬性文件,但其他屬性文件在那裏。我們走在正確的軌道上!我添加了18n文件,因此〜/ m2文件夾中的戰爭更新出現問題。我只是試圖做一個mvn clean,然後在我的pom.xml中增加版本並重新啓動進程,但在集成測試期間,異常仍然存在,因此也是如此。war沒有安裝在〜/ .m2/repository文件夾中。 – Manu

相關問題