我正在尝试在用于集成测试的maven构建期间将测试数据加载到测试数据库中。 persistence.xml正在被正确地复制到target/test-classes/META-INF/
,但是在运行测试时我得到了这个异常。
javax.persistence.PersistenceException:没有名为aimDatabase的EntityManager的持久性提供程序
看起来它没有找到或加载persistence.xml。
我正在尝试在用于集成测试的maven构建期间将测试数据加载到测试数据库中。 persistence.xml正在被正确地复制到target/test-classes/META-INF/
,但是在运行测试时我得到了这个异常。
javax.persistence.PersistenceException:没有名为aimDatabase的EntityManager的持久性提供程序
看起来它没有找到或加载persistence.xml。
刚刚解决了基于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
,结果证明是我问题的根源。
我正在使用Maven2,我忘了在我的pom.xml文件中添加这个依赖项:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.4.0.GA</version>
</dependency>
我遇到了同样的问题,并不是它找不到persistence.xml文件,而是找不到XML中指定的提供程序。
确保您的xml文件中具有正确的JPA提供程序依赖项和正确的提供程序定义。
即。 <provider>oracle.toplink.essentials.PersistenceProvider</provider>
有了maven,我不得不在本地安装2个toplink-essentials罐子,因为没有公共存储库可以保留依赖性。
你的persistence.xml是否位于scr / test / resources中? 因为我遇到了类似的问题。
只要我的persistence.xml位于src / main / resources中,一切都正常。
如果我将persistence.xml移动到src / test / resources则不再有效。
这里唯一有用但令人悲伤的答案是: http : //jira.codehaus.org/browse/SUREFIRE-427
似乎现在不可能出于不明原因。 :-(
如果这是在Windows上,您可以使用sysinternal的procmon来查明它是否正在检查正确的路径。
只需按路径过滤 - >包含 - > persistence.xml。 Procmon将尝试打开名为persistenc.xml的文件,您可以检查以查看尝试的路径。
有关procmon的更多详细信息,请参见此处: http : //technet.microsoft.com/en-us/sysinternals/bb896645.aspx
我们遇到了同样的问题,对项目做了一些调整,并最终找到了以下问题(更明确的错误描述):在oracle.toplink.essentials.ejb.cmp3.persistence。 PersistenceUnitProcessor.computePURootURL(PersistenceUnitProcessor.java:248)
有了这些信息,我们回想起了一个主要规则:路径名称中没有白色空间!
试试这个。 为我们工作微笑 。 也许有一天这将被修复。
希望这对你有用。 祝好运。