MissingResourceException - 在 Maven 集成测试阶段找不到捆绑包

Posted

技术标签:

【中文标题】MissingResourceException - 在 Maven 集成测试阶段找不到捆绑包【英文标题】:MissingResourceException - Bundle not found during maven integration-test phase 【发布时间】:2012-12-15 15:28:14 【问题描述】:

我正在使用 maven 构建一个多语言网站。

属性文件存放在 /src/main/resources

maven在构建阶段生成的war包含WEB-INF/classes中的*.properties文件。如果我将此 war 文件部署到生产环境,则不会抛出 MissingResourceException。

所以除了在集成测试中出现 MissingResourceException 之外,一切正常。顺便说一句,由于 failsafe-maven-plugin 可以执行集成测试。

那么在集成测试阶段出了什么问题?

真正奇怪的是我可以在集成测试期间加载另一个属性文件(不是为了 I18N 目的)。唯一的区别是我使用 FileReader,而不是使用 ResourceBundle.getBundle。

我错过了什么吗?

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

使用 FileReader 无法设置字符编码。最好使用new InputStreamReader(new FileInputStream(file), "ISO-8859-1"),它是明确的、独立于操作系统的。而 ISO-8859-1 是属性的标准编码(丑陋)。

除了 /src/test/resources 还应该找到 /src/main/resources。

你检查过 /target/classes 了吗?

复制阶段可能出错(准备资源、准备测试资源等)。 也许是类相关的getClass().getResourceAsStream(relativePath)

【讨论】:

感谢您的回复。回答您的问题:I18N 文件位于 /target/classes 中,我不使用 getClass().getResourceAsStream(relativePath) 之类的东西,我使用 ResourceBundle.getBundle("baseName")。我不明白的是,我们有测试阶段(maven-surefire-plugin)然后是打包阶段(maven-war-plugin),然后是应该使用战争的集成测试阶段(failsafe-maven-plugin)之前生成的文件(这个在生产中工作的war文件),如果我检查它,I18N文件就在里面。我在maven进程上错了吗? 看起来不错(对我来说);也可以查看.m2 maven 存储库;使用 7zip/WinZip 检查战争。 我刚刚检查了 ~/.m2/repository 中的战争,并且 I18N 属性文件丢失,但其他属性文件在那里。我们走在正确的轨道上!我在之后添加了 18n 个文件,因此在 ~/m2 文件夹中更新该战争存在问题。我只是尝试执行 mvn clean 并增加 pom.xml 中的版本并重新启动该过程,但在集成测试期间异常仍然存在,因此在 ~/.m2/repository 文件夹中不再安装 .war 。 一种技巧是将资源移动到另一个 maven 项目中。也许将详细程度 -v 设置为 on,可能有助于跟踪问题。此外,测试本身可能会以自己的方式指定事物。 - 抱歉,我对远程帮助不大。 好的,我发现出了什么问题,我会发布答案。非常感谢您的帮助。【参考方案2】:

好的,问题是“只是”我用来获取捆绑包的 baseName :

ResourceBundle.getBundle("/MyBundle");

而不是

ResourceBundle.getBundle("MyBundle");

尽管如此,这是一个奇怪的行为,因为第一行代码在部署 .war 时运行良好,但在集成测试期间却不行。如果有人知道为什么,我真的对答案很感兴趣!

【讨论】:

我认为你搞反了... ResourceBundle.getBundle("MyBundle");

以上是关于MissingResourceException - 在 Maven 集成测试阶段找不到捆绑包的主要内容,如果未能解决你的问题,请参考以下文章

使用 JDBC 时出现 MissingResourceException?

解决方法 java util MissingResourceException Can't find bundle fo

Angular 11,Ionic 5,Capacitor 2 gradle 同步错误“引起:org.gradle.api.resources.MissingResourceException”

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for b

Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.Loc

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段