找不到JUnit Eclipse JPA persistence.xml [英] JUnit Eclipse JPA persistence.xml not located

查看:71
本文介绍了找不到JUnit Eclipse JPA persistence.xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

方案如下.我正在Eclipse上进行J2EE项目.该项目是使用Maven创建的.我正在努力启动并运行单元测试,并且当我尝试创建EntityManager时,它引发了异常:

The scenario is as follows. I'm doing a J2EE project on Eclipse. The project was created with Maven. I'm strying to get my Unit tests up and running and when I try to create the EntityManager, it throws an exception:

javax.persistence.PersistenceException:没有针对以下对象的持久性提供程序EntityManager命名为primary.

javax.persistence.PersistenceException: No Persistence provider for EntityManager named primary.

@BeforeClass
public static void setUpClass() throws Exception {
    Logger.getLogger("org").setLevel(Level.ALL);

    EntityManagerFactory factory = Persistence.createEntityManagerFactory("primary.");
        em = (EntityManager) factory.createEntityManager();
}

因此,我通过从Persistent类获取URLClassLoader来检查运行时类路径,其中包括:

So I checked the runtime class path, by getting the URLClassLoader from the Persistent class, which includes:

/卷/SVEN/dev/eclipse-workspace/e-virtual/ejb/target/test-classes//卷/SVEN/dev/eclipse-workspace/e-virtual/ejb/target/classes//Volumes/SVEN/dev/jar_repo/mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar

/Volumes/SVEN/dev/eclipse-workspace/e-virtual/ejb/target/test-classes/ /Volumes/SVEN/dev/eclipse-workspace/e-virtual/ejb/target/classes/ /Volumes/SVEN/dev/jar_repo/mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar

META-INF目录位于它所属的位置,位于:

The META-INF directory sits right where it belongs, in:

e-virtual/ejb/target/test-classes/META-INF/persistence.xml和e-virtual/ejb/target/classes/META-INF/persistence.xml

e-virtual/ejb/target/test-classes/META-INF/persistence.xml and e-virtual/ejb/target/classes/META-INF/persistence.xml

我似乎只能通过以下方式访问persistence.xml:System.out.println(getClass().getResource("../../../../../META-INF/persistence.xml")));;

I only seem to be able to access the persistence.xml through: System.out.println(getClass().getResource("../../../../../META-INF/persistence.xml"));

这真的让我感到惊讶.我在这里想念什么?

This really gets me flabbergasted. What am I missing here?

我已经清理过两次.我真的很想念这里.

I've already cleaned my built twice. I'm really at a miss here.

这是类路径的完整转储:

Here's the full dump of the class path:

完整列表如下:

/Volumes/SVEN/dev/eclipse-workspace/e-virtual/ejb/target/test-classes/
/Volumes/SVEN/dev/eclipse-workspace/e-virtual/ejb/target/classes/
/Volumes/SVEN/dev/jar_repo/mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar
/Users/sven/.m2/repository/org/jboss/spec/javax/ejb/jboss-ejb-api_3.1_spec/1.0.2.Final/jboss-ejb-api_3.1_spec-1.0.2.Final.jar
/Users/sven/.m2/repository/javax/enterprise/cdi-api/1.0-SP4/cdi-api-1.0-SP4.jar
/Users/sven/.m2/repository/org/jboss/spec/javax/interceptor/jboss-interceptors-api_1.1_spec/1.0.1.Final/jboss-interceptors-api_1.1_spec-1.0.1.Final.jar
/Users/sven/.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar
/Users/sven/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final.jar
/Users/sven/.m2/repository/org/hibernate/hibernate-validator/4.2.0.Final/hibernate-validator-4.2.0.Final.jar
/Users/sven/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar
/Users/sven/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar
/Users/sven/.m2/repository/junit/junit/4.11/junit-4.11.jar
/Users/sven/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
/Users/sven/.m2/repository/org/jboss/arquillian/junit/arquillian-junit-container/1.1.0.Final/arquillian-junit-container-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/junit/arquillian-junit-core/1.1.0.Final/arquillian-junit-core-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/test/arquillian-test-api/1.1.0.Final/arquillian-test-api-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/core/arquillian-core-api/1.1.0.Final/arquillian-core-api-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/test/arquillian-test-spi/1.1.0.Final/arquillian-test-spi-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/core/arquillian-core-spi/1.1.0.Final/arquillian-core-spi-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/container/arquillian-container-test-api/1.1.0.Final/arquillian-container-test-api-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/shrinkwrap/shrinkwrap-api/1.1.2/shrinkwrap-api-1.1.2.jar
/Users/sven/.m2/repository/org/jboss/arquillian/container/arquillian-container-test-spi/1.1.0.Final/arquillian-container-test-spi-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/core/arquillian-core-impl-base/1.1.0.Final/arquillian-core-impl-base-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/test/arquillian-test-impl-base/1.1.0.Final/arquillian-test-impl-base-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/container/arquillian-container-impl-base/1.1.0.Final/arquillian-container-impl-base-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/config/arquillian-config-api/1.1.0.Final/arquillian-config-api-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/config/arquillian-config-impl-base/1.1.0.Final/arquillian-config-impl-base-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/container/arquillian-container-test-impl-base/1.1.0.Final/arquillian-container-test-impl-base-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/shrinkwrap/shrinkwrap-impl-base/1.1.2/shrinkwrap-impl-base-1.1.2.jar
/Users/sven/.m2/repository/org/jboss/shrinkwrap/shrinkwrap-spi/1.1.2/shrinkwrap-spi-1.1.2.jar
/Users/sven/.m2/repository/org/jboss/arquillian/protocol/arquillian-protocol-servlet/1.1.0.Final/arquillian-protocol-servlet-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/arquillian/container/arquillian-container-spi/1.1.0.Final/arquillian-container-spi-1.1.0.Final.jar
/Users/sven/.m2/repository/org/jboss/shrinkwrap/descriptors/shrinkwrap-descriptors-api-base/2.0.0-alpha-3/shrinkwrap-descriptors-api-base-2.0.0-alpha-3.jar
/Users/sven/.m2/repository/org/jboss/shrinkwrap/descriptors/shrinkwrap-descriptors-spi/2.0.0-alpha-3/shrinkwrap-descriptors-spi-2.0.0-alpha-3.jar
/Volumes/SVEN/dev/eclipse/jee-oxygen2/Eclipse.app/Contents/Eclipse/configuration/org.eclipse.osgi/1714/0/.cp/
/Volumes/SVEN/dev/eclipse/jee-oxygen2/Eclipse.app/Contents/Eclipse/configuration/org.eclipse.osgi/1713/0/.cp/

推荐答案

问题不在于您的persistence.xml文件或其位置,而是您的类路径中没有提供程序JAR,因此不是插入.您应该通过maven为所需的持久性提供程序添加依赖项:例如,休眠.

The problem is not with your persistence.xml file or location of it, rather that you don't have provider JAR on your classpath, so it is not be plugged in. You should add dependency through maven for your desired persistence provider : Hibernate for example.

<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>

您可以使用OpenJPA(如果添加Java EE提供的依赖项,则为参考实现

You can use OpenJPA (reference implementation if you add Java EE provided dependency

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

一旦您的类路径上具有提供程序实现JAR,JPA就会自动将其提取.

Once you have provider implementation JAR on your classpath, it will be picked up by JPA automatically.

这篇关于找不到JUnit Eclipse JPA persistence.xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆