【问题标题】:after assembling jar - No Persistence provider for EntityManager named组装 jar 后 - EntityManager 没有持久性提供程序命名
【发布时间】:2010-03-16 17:25:09
【问题描述】:

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

这是我的 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 的经验,我不知道我是否遗漏了什么,所以如果你有任何想法很高兴听到他们

【问题讨论】:

    标签: java maven-2 jpa uberjar


    【解决方案1】:

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

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

    清单版本:1.0 Ant 版本:Apache Ant 1.7.0 创建者:1.6.0_03-b05(Sun Microsystems Inc.) 主类: 类路径:lib/.jar lib/.jar lib/.jar ...

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 不确定是否清楚,通过maven的程序集插件我创建了一个uberjar,这个插件默认扩展了我jar中的所有依赖jar,所以我需要的一切都应该在我的jar中似乎就像我在看它...此外,我尝试创建实体管理器工厂,当提供属性映射时结果是相同的,这让我更加困惑,我认为它与路径有关
      • 啊,对不起。我错过了“uberjar”作为一个特定的术语,而不是一个通用的术语。你有没有试过震荡它,然后在另一个盒子上解开它并以这种方式运行?我记得有这个问题,从我们右边的“相关”侧边栏来看,许多其他的也有,但我不记得我的具体修复,虽然我怀疑它是“un-jar and run it not-in-一个罐子”。很抱歉误解了“uberjar”参考。
      【解决方案3】:

      Maven Assembly Plugin 与预定义的jar-with-dependencies 描述符一起使用时,您将获得一个包含项目二进制输出的jar 存档,以及解压缩的依赖项。所以我能想到的一个可能的问题是多个带有persistence.xml 的 JAR,在这种情况下,我不确定你会在最终组装中得到哪一个。

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

      • 检查persistence.xml 是否存在(应该)
      • 检查它是否包含预期的持久性单元testPU
        • 如果没有,找到冲突文件的来源并重写程序集描述符以排除它

      【讨论】:

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