【问题标题】:No Persistence provider for EntityManager named with eclipselink没有使用 eclipselink 命名的 EntityManager 的持久性提供程序
【发布时间】:2015-10-05 09:11:50
【问题描述】:

我有一个在 Eclipse 中运行良好的小项目。但是,当我将它打包到 jar 中时,它会因 No Persistance 提供程序而失败。

我尝试将 eclipselink 添加为 Maven 依赖项、外部 jar 文件以及 Eclipse 中的普通项目依赖项。我也试过用extract打包和打包所需的库,没有区别。

值得注意的是,Jersey 依赖项可以正常工作并毫无问题地调用服务器。所以这些依赖项在 .jar 文件中起作用。

The Persistence.xml is located in
project/src/META-INF/persistence.xml

I have tried removing one of the persistance-unit without change.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="TestMDB" transaction-type="RESOURCE_LOCAL">
        <class>com.sg.db.entity.Result</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:ucanaccess://viking.mdb"/>
            <property name="javax.persistence.jdbc.driver" value="net.ucanaccess.jdbc.UcanaccessDriver"/>
        </properties>
    </persistence-unit>
    <persistence-unit name="TestMDBLive" transaction-type="RESOURCE_LOCAL">
        <class>com.sg.db.entity.Result</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:ucanaccess://c:/Viking2001/DataBas/Viking.mdb"/>
            <property name="javax.persistence.jdbc.driver" value="net.ucanaccess.jdbc.UcanaccessDriver"/>
        </properties>
    </persistence-unit>
</persistence>

该项目是一个 Maven 项目。它有我用

添加的外部依赖项
<dependency>
 <groupId>ucanaccess</groupId>
 <artifactId>ucanaccess</artifactId>
 <scope>system</scope>
 <version>3.0.1</version>
 <systemPath>${project.basedir}/lib/ucanaccess-3.0.1.jar</systemPath>
</dependency>


No Persistence provider for EntityManager named TestMDBLive
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)

它将在 init() 中的工厂创建时失败

public void init() {

        //Setup database connection
        try {
            factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
            em = factory.createEntityManager();

        } catch (Exception ex) {
            ex.printStackTrace();       }

    }

【问题讨论】:

  • 如何打包您的应用程序?
  • 作为 Eclipse 中的可运行 jar
  • 尝试将&lt;provider&gt;org.eclipse.persistence.jpa.PersistenceProvider&lt;/provider&gt; 放入您的持久性单元配置中。
  • 没有改变这样做。还是一样的错误信息。我需要一个配置为指向 persistence.xml 的 MANIFEST.MF 吗?
  • persistence.xml 在部署的 jar 文件中位于何处?它应该在&lt;root&gt;/META-INF/persistence.xml。如果你把它放在project/src/META-INF 下,那么它可能被放错地方了。

标签: java eclipse maven jpa


【解决方案1】:

尝试使用maven assembly plugin 打包您的应用程序。

这将确保所有依赖项都正确放入 jar 存档中

【讨论】:

  • 试过了,但它最终不会打包 pom.xml 中的外部 jar
  • 如何启动程序集插件?
  • 使用 mvn package 从提示中输出没有错误。
  • 配置插件后,您应该像这样运行它: mvn clean assembly:single 。更多信息在这里:stackoverflow.com/questions/13615634/…
【解决方案2】:

我最初创建了一个使用 configure 的普通项目并将其转换为 maven 项目。

我从头开始将该项目重新创建为 maven 项目,并将资源复制过来。之后项目运行正常,eclipselink 也包含在内。

需要注意的是,persistence.xml 应该仍然在 src/mail/java/META.INF 中,不需要移动它。

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 2010-11-12
    • 2022-07-05
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    相关资源
    最近更新 更多