2

我正在开发一个独立的应用程序,从我的 ide(intellij 想法)启动它时它工作正常,但是在创建一个 uberjar 并从它启动应用程序之后 javax.persistence.spi.PersistenceProvider 被抛出说“没有名为 testPU 的 EntityManager 的持久性提供程序”

这是我的 persistence.xml,它位于 meta-inf 目录下:

 <persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
     <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <class>test.model.Configuration</class>
     <properties>
         <property name="hibernate.connection.username" value="root"/>
         <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
         <property name="hibernate.connection.password" value="root"/>
         <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
         <property name="hibernate.c3p0.timeout" value="300"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
     </properties>
 </persistence-unit>

这是我创建实体管理器工厂的方式:

emf = Persistence.createEntityManagerFactory("testPU");

我使用 maven 并尝试了默认配置的组装插件,我没有太多组装 jar 的经验,我不知道我是否遗漏了什么,所以如果你有任何想法,我很高兴听到他们

4

3 回答 3

2

您的库可能有问题。请尝试以下操作。

  1. 构建您的应用程序 JAR 文件
  2. 获取您用于应用程序的所有库并将它们放在文件夹 lib 中。
  3. 将您的 JAR 文件和 lib 文件夹放在一个新文件夹中,例如 MyApp。
  4. 使用 7-ZIP 或 WinRAR 打开文件。在 META-INF 文件夹中查找 Manifest.MF。
  5. 你的清单文件应该看起来像..

Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Created-By: 1.6.0_03-b05 (Sun Microsystems Inc.) Main-Class: Class-Path: lib/.jar lib/.jar lib/.jar 。 ..

于 2010-10-01T01:07:18.813 回答
0

我记得有这个问题,我认为问题是你不能在罐子里引用罐子。对于您的外部库,它们需要在您的 jar 中扩展或位于系统 CLASSPATH 的其他位置。因此,由于您没有指定要放入罐子中的所有内容,因此我打赌这个。

如果使用 -jar 参数运行 jar,则不能使用 -cp 命令行参数。非此即彼。

于 2010-03-16T17:38:03.430 回答
0

当使用带有预定义描述符的Maven 程序集插件时,您会得到一个 jar 存档,其中包含项目的二进制输出,以及解压后的依赖项。所以我能想到的一个可能的问题是带有.jar-with-dependenciespersistence.xml

由于您收到一条错误消息,抱怨“没有名为 testPU 的 EntityManager 的持久性提供程序”,我将打开 megajar 并:

  • 检查persistence.xml是否存在(应该)
  • 检查它是否包含预期的持久性单元testPU
    • 如果不是,请找到冲突文件的来源并重写程序集描述符以将其排除
于 2010-09-26T03:54:30.443 回答