JPA persistence.xml文件的类路径位于哪里?

8
这是我想要做的事情。我在Web应用程序中使用JPA持久性,但我有一组单元测试需要在容器外运行。
我在主应用程序的META_INF文件夹中拥有主要的persistence.xml,在容器(Glassfish)中运行得很好。
我在test-classes目录的META-INF文件夹中放置了第二个persistence.xml。这包含一个单独的持久化单元,我只想用于测试。在eclipse中,我将此文件夹放在默认文件夹的classpath上方,看起来它可以工作。
现在当我直接从命令行运行maven构建并尝试运行单元测试时,persistence.xml覆盖被忽略了。我可以在maven生成的test-classes目录的META-INF文件夹中看到覆盖,并且我希望maven测试使用此文件,但它没有。我的Spring测试配置覆盖以类似的方式实现,正在工作。
我对于 persistence.xml 文件是否通过类路径进行定位感到困惑。如果是这样的话,我的覆盖应该像 Spring 覆盖一样起作用,因为 Maven Surefire 插件 解释“[测试类目录] 将包含在测试类路径的开头”。
我是否错误地预期了 persistence.xml 文件的位置?
我可以(并且已经)在生产 persistence.xml 文件中创建第二个持久化单元,但将测试配置放入此生产文件中感觉很不好。欢迎提出任何其他实现目标的想法。
2个回答

4

目前还不清楚您放置了“第二个”persistence.xml(测试版本)的位置,但您应该将其放置在src/test/resources/META-INF中。测试资源会自动添加到Maven为您的单元测试设置的类路径中,并且优先于放置在src/main/resources中的资源。


3

persistence.xml从类路径加载;过去,我做过你描述的事情。

这很可能是maven的问题。您可以使用-X选项运行它来调试maven类路径。


好的 - 感谢反馈。至少我知道我没有做什么完全不合适的事情。 - Vinnie
好的,现在它可以工作了。之前我在不同的文件中给每个持久化单元命名相同的名称。我将测试持久化单元更改为不同的名称。这似乎不太对,但也许这是我不知道的限制。 - Vinnie
我找到了之前写过的代码,发现我为单元测试定义了不同的持久化单元,尽管我的测试persistence.xml文件也定义了相同(非测试)的持久化单元。但这可能并不是必要的。我认为单元测试在创建实体管理器时使用测试持久化单元。 - Ken Liu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接