根据生产或测试环境,在 Eclipse 中使用不同的 JPA.persistence.xml

Use different JPA.persistence.xml in Eclipse depending on production or test environment

我们正在使用 gradle 并具有默认项目结构:

/src
   /main
     /java
     /resources
       /META-INF
         persistence.xml
   /test
     /java
     /resources
       /META-INF
         persistence.xml

虽然我们 运行 我们的 junit 测试 gradle,但一切都很好(我们没有任何关于源路径等的特殊 gradle 配置):persistence.xml 来自 'test' 被使用。

但是如果我们尝试 运行 我们的 junit 测试与 eclipse,总是使用 'main' 中的 peristence.xml。

我们如何配置 eclipse 以将 'main' 中的 persistence.xml 用于一个启动配置,但将 'test' 中的 persistence.xml 用于所有 junit 测试?

我已经用一个 persistence.xml 和不同的持久性单元解决了这个问题。

<persistence-unit name="MAIN">
  ...
</persistence-unit>

<persistence-unit app="TEST">
  ...
</persistence-unit>

然后在您的应用中,您将使用

注入主持久化单元
@PersistenceContext(name="MAIN", unitName="MAIN")
private EntityManager entityManager;

对于单元测试,您可以使用 TEST 持久化单元显式创建一个 EntityManager,然后将其手动注入到被测对象中:

EntityManager em = Persistence.createEntityManagerFactory("TEST").createEntityManager();
bean.setEntityManager(em);

如果这是关于从您的类路径加载的资源的一般问题,请尝试另一件事:

在 Eclipse 的项目属性中,JavaBuild Path->Order and Export,将测试文件夹放在 src 文件夹上方。

然后在 Deployment Assembly 下,排除您的测试文件夹

这将确保当您直接从 Eclipse 中启动测试时,您将首先在测试文件夹中搜索类路径资源。但是当您改为作为 webapp 启动时,测试文件夹将从 WEB-INF/classes 中排除。