2012-12-15 116 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

相关问题