我正在尝试在用于集成测试的maven构建期间将测试数据加载到测试数据库中。 persistence.xml正在被正确复制到target/test-classes/META-INF/
,但是在运行测试时我得到了这个异常。
javax.persistence.PersistenceException: 没有持久性提供者 EntityManager名为aimDatabase
看起来它没有找到或加载persistence.xml。
答案 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
似乎现在不可能出于不明原因。 : - (