【发布时间】: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
-
尝试将
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>放入您的持久性单元配置中。 -
没有改变这样做。还是一样的错误信息。我需要一个配置为指向 persistence.xml 的 MANIFEST.MF 吗?
-
persistence.xml在部署的 jar 文件中位于何处?它应该在<root>/META-INF/persistence.xml。如果你把它放在project/src/META-INF下,那么它可能被放错地方了。