场景如下。我正在 Eclipse 上做一个 J2EE 项目。该项目是使用 Maven 创建的。我正在尝试启动并运行我的单元测试,当我尝试创建 EntityManager 时,它会抛出异常:
javax.persistence.PersistenceException:没有持久性提供程序
EntityManager 命名为primary。
@BeforeClass
public static void setUpClass() throws Exception {
Logger.getLogger("org").setLevel(Level.ALL);
EntityManagerFactory factory = Persistence.createEntityManagerFactory("primary.");
em = (EntityManager) factory.createEntityManager();
}
因此,我通过从持久类获取 URLClassLoader 检查运行时类路径,其中包括:
/卷/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
META-INF 目录位于它所属的位置,位于:
e-virtual/ejb/target/test-classes/META-INF/persistence.xml
和
e-virtual/ejb/target/classes/META-INF/persistence.xml
我似乎只能通过以下方式访问 persistence.xml:
System.out.println(getClass().getResource("../../../../../META-INF/persistence.xml"));
这实在是让我大吃一惊。我在这里缺少什么?
我已经清理过我的建筑两次了。我真的很想念这里。
这是类路径的完整转储:
这是完整列表:
/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 添加所需的持久性提供程序的依赖项:Hibernate for例子。
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
您可以使用 OpenJPA(如果添加 Java EE 提供的依赖项,请参考实现
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
一旦您的类路径上有提供程序实现 JAR,JPA 将自动选取它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)