【问题标题】:Is JPA persistence.xml classpath located?JPA persistence.xml 类路径是否位于?
【发布时间】:2011-02-07 23:14:53
【问题描述】:

这就是我想要做的。我在 Web 应用程序中使用 JPA 持久性,但我有一组单元测试要在容器外运行。

我的主应用程序的META_INF 文件夹中有我的主要persistence.xml,它在容器(Glassfish)中运行良好。

我在test-classes 目录的META-INF 文件夹中放置了第二个persistence.xml。这包含一个单独的持久性单元,我只想用于测试。在 Eclipse 中,我将此文件夹放在类路径中高于默认文件夹的位置,它似乎可以工作。

现在,当我直接从命令行运行 maven 构建并尝试运行单元测试时,persistence.xml 覆盖将被忽略。我可以在 maven 生成的 test-classes 目录的 META-INF 文件夹中看到覆盖,我希望 maven 测试使用这个文件,但事实并非如此。我以类似方式实现的 Spring 测试配置覆盖正在工作。

我对@9​​87654330@ 是否通过类路径定位感到困惑。如果是这样,我的覆盖应该像 spring 覆盖一样工作,因为 maven surefire 插件explains“[测试类目录] 将包含在测试类路径的开头”。

我是否错误地预测了persistence.xml 文件的位置?

我可以(并且已经)在生产persistence.xml 文件中创建第二个持久性单元,但是将测试配置放入此生产文件中感觉很脏。欢迎任何其他关于如何实现我的目标的想法。

【问题讨论】:

    标签: java unit-testing maven-2 jpa classpath


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      persistence.xml 从类路径加载;过去,我完全按照你的描述做了。

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

      【讨论】:

      • 好的 - 感谢您的反馈。至少我知道我所做的事情并没有完全公开。
      • 好的 - 现在可以了。在我用相同的名称命名不同文件中的每个持久性单元之前。我将测试持久性单元更改为具有不同的名称。这对我来说似乎不对,但也许这是我不知道的限制。
      • 我去挖掘了我之前做过的代码,我确实为单元测试定义了不同的持久性单元,尽管我的测试 persistence.xml 文件确实有相同的(非测试) 还定义了持久性单元。不过,这可能没有必要。我认为单元测试在创建实体管理器时使用测试持久性单元。
      猜你喜欢
      • 2012-05-01
      • 2010-11-19
      • 2012-01-06
      • 1970-01-01
      • 2018-05-16
      • 2012-08-21
      • 2011-02-09
      • 2010-11-11
      • 1970-01-01
      相关资源
      最近更新 更多