测试无法调用:persistence.xml不存在或无法访问问题求助
解决ShrinkWrap打包测试时persistence.xml找不到的问题
问题根源
你遇到的报错是因为调用addAsResource("persistence.xml", "/META-INF/persistence.xml")时,ShrinkWrap会从当前类路径根目录寻找名为persistence.xml的文件,但你的文件实际在/src/main/resources/META-INF/persistence.xml(即类路径下的META-INF子目录里),所以找不到源文件。而注释掉该行后,Maven默认会把src/main/resources下的所有资源(包括META-INF/persistence.xml)自动纳入测试类路径,因此测试能正常运行。
解决办法
方法1:修正addAsResource的源路径
把源路径改为类路径中实际的文件位置,也就是META-INF/persistence.xml,代码如下:
JavaArchive archive = ShrinkWrap.create(JavaArchive.class) // 其他包和资源添加逻辑 .addAsResource("META-INF/persistence.xml", "/META-INF/persistence.xml");
或者因为目标路径和源路径的位置一致,可以简化为:
.addAsResource("META-INF/persistence.xml");
方法2:使用测试专用的persistence.xml(可选)
如果你的测试需要和生产环境不同的持久化配置,建议把测试用的persistence.xml放在/src/test/resources/META-INF/下,此时直接调用addAsResource("META-INF/persistence.xml")就能正确找到测试环境的配置文件,同时不会影响生产环境的配置。
方法3:依赖Maven默认资源加载(不手动添加)
如果测试用的就是生产环境的persistence.xml,完全可以注释掉addAsResource那行,Maven会自动将src/main/resources下的资源加载到测试类路径中,无需手动添加。
内容的提问来源于stack exchange,提问作者Jcoder
相关产品推荐
相关产品推荐

