You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试无法调用: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:52:07