在maven测试期间找不到persistence.xml

时间:2008-09-16 20:25:56

标签: java testing maven-2 jpa automated-tests

我正在尝试在用于集成测试的maven构建期间将测试数据加载到测试数据库中。 persistence.xml正在被正确复制到target/test-classes/META-INF/,但是在运行测试时我得到了这个异常。

  

javax.persistence.PersistenceException:   没有持久性提供者   EntityManager名为aimDatabase

看起来它没有找到或加载persistence.xml。

6 个答案:

答案 0 :(得分:16)

刚刚解决了基于Maven / Eclipse的JPA项目的相同问题。

我在src/main/java下面有我的META-INF目录,并且在测试阶段之前没有将它复制到目标目录。

将此目录移至src/main/resources解决了问题,并确保在运行测试时META-INF/persistence.xml中存在target/classes文件。

认为 JPA方面将我的META-INF/persistence.xml文件放在src/main/java中,结果证明这是我问题的根源。

答案 1 :(得分:6)

我正在使用Maven2,而我忘记在我的pom.xml文件中添加此依赖项:

 <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-entitymanager</artifactId>
   <version>3.4.0.GA</version>
 </dependency> 

答案 2 :(得分:2)

如果这是在Windows上,您可以使用sysinternal的procmon来查明它是否正在检查正确的路径。

只需按路径过滤 - &gt;包含 - &gt; persistence.xml中。 Procmon将尝试打开名为persistenc.xml的文件,您可以检查以查看尝试的路径。

有关procmon的详细信息,请参阅此处:http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

答案 3 :(得分:2)

我遇到了同样的问题,并不是找不到persistence.xml文件,而是找不到XML中指定的提供程序。

确保您的xml文件中具有正确的JPA提供程序依赖项和正确的提供程序定义。

即。 <provider>oracle.toplink.essentials.PersistenceProvider</provider>

使用maven,我必须在本地安装2个toplink-essentials罐子,因为没有公共存储库可以保留依赖性。

答案 4 :(得分:1)

我们遇到了同样的问题,对项目做了一些调整,并最终找到了以下内容 问题(更明确的错误描述): 在oracle.toplink.essentials.ejb.cmp3.persistence。   PersistenceUnitProcessor.computePURootURL(PersistenceUnitProcessor.java:248)

根据这些信息,我们回顾了一条主要规则: 道路名称​​中没有白色空间!!!

试试这个。为我们工作微笑。 也许有一天这个问题会得到解决。

希望这适合你。祝你好运。

答案 5 :(得分:1)

你的persistence.xml是否位于scr / test / resources中?因为我遇到了类似的问题。

只要我的 persistence.xml 位于 src / main / resources 中,一切正常。

如果我将 persistence.xml 移动到 src / test / resources 则不再有效。

唯一有用但令人悲伤的答案是:http://jira.codehaus.org/browse/SUREFIRE-427

似乎现在不可能出于不明原因。 : - (