这就是我想要做的。我在 Web 应用程序中使用 JPA 持久性,但我有一组单元测试想在容器外运行。
我的主要 persistence.xml
位于我的主应用程序的 META_INF
文件夹中,它在容器 (Glassfish) 中运行良好。
我在 test-classes
目录的 META-INF
文件夹中放置了第二个 persistence.xml
。这包含一个单独的持久性单元,我只想将其用于测试。在 Eclipse 中,我将此文件夹放在类路径中高于默认文件夹的位置,它似乎可以正常工作。
现在,当我直接从命令行运行 Maven 构建并尝试运行单元测试时,persistence.xml
覆盖被忽略。我可以在 Maven 生成的 test-classes
目录的 META-INF
文件夹中看到覆盖,我希望 Maven 测试使用这个文件,但事实并非如此。我的 Spring 测试配置覆盖,以类似的方式实现,正在运行。
我对 persistence.xml
是否通过类路径定位感到困惑。如果是的话,我的覆盖应该像 spring 覆盖一样工作,因为 maven surefire 插件 explains “[测试类目录] 将包含在测试类路径的开头”。
我是否错误地预测了 persistence.xml
文件的位置?
我可以(并且已经)在生产 persistence.xml
文件中创建第二个持久性单元,但将测试配置放入此生产文件感觉很脏。欢迎任何关于如何实现我的目标的其他想法。
最佳答案
不清楚你把“第二个”persistence.xml
(测试版)放在哪里,但你应该把它放在 src/test/resources/META-INF
.测试资源会自动添加到 Maven 为单元测试设置的类路径中,并优先于放置在 src/main/resources
中的资源。
关于java - JPA persistence.xml 类路径是否位于?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2638448/