组装 jar 后 - 没有名为 EntityManager 的持久性提供程序

发布于 2024-08-24 23:47:59 字数 1262 浏览 5 评论 0原文

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

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

 
     org.hibernate.ejb.HibernatePersistence
     test.model.Configuration
     <属性>
         <属性名称=“hibernate.connection.username”值=“root”/>
         <属性名称=“hibernate.connection.driver_class”值=“com.mysql.jdbc.Driver”/>
         <属性名称=“hibernate.connection.password”值=“root”/>
         <属性名称=“hibernate.connection.url”值=“jdbc:mysql://localhost:3306/test”/>
         <属性名称=“hibernate.show_sql”值=“true”/>
         <属性名称=“hibernate.dialect”值=“org.hibernate.dialect.MySQLInnoDBDialect”/>
         <属性名称=“hibernate.c3p0.timeout”值=“300”/>
         <属性名称=“hibernate.hbm2ddl.auto”值=“更新”/>
     
 

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

emf = Persistence.createEntityManagerFactory("testPU");

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

im developing a standalone application and it works fine when starting it from my ide(intellij idea), but after creating an uberjar and start the application from it javax.persistence.spi.PersistenceProvider is thrown saying "No Persistence provider for EntityManager named testPU"

here is my persistence.xml which is placed under meta-inf directory:

 <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>

and here is how im creating the entity manager factory:

emf = Persistence.createEntityManagerFactory("testPU");

im using maven and tried the assembly plug-in with the default configuration fot it, i dont have much experience with assembling jars and i dont know if im missing something, so if u have any ideas ill be glad to hear them

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风吹过旳痕迹 2024-08-31 23:47:59

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

  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 ...

You are probably having problems with your libraries.. Try doing below.

  1. Build your application JAR File
  2. Get all libraries that you have used for the application and put them in a folder lib.
  3. Place your JAR file and lib folder in a new folder say MyApp.
  4. Open your file by using 7-ZIP or WinRAR. Look for Manifest.MF in the META-INF folder.
  5. Your manifest file should look something like..

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 ...

水水月牙 2024-08-31 23:47:59

我记得有过这个问题,我认为问题是你不能引用罐子里的罐子。对于您的外部库,它们需要在您的 jar 内扩展或位于系统 CLASSPATH 的其他位置。既然你没有具体说明你在罐子里放了什么,我就赌这个。

如果使用 -jar 参数运行 jar,则不能使用 -cp 命令行参数。一个或另一个。

I remember having that issue, and I think the problem was that you can't reference a jar in a jar. For your external libraries, they need to be expanded inside your jar or live elsewhere on the system CLASSPATH. So since you don't specify what all you're putting in your jar, I'm betting on this one.

You can NOT use the -cp command line parameter if you run your jar using the -jar parameter. One or the other.

尸血腥色 2024-08-31 23:47:59

当使用带有预定义 jar-with-dependencies描述符,您将获得一个 jar 存档,其中包含项目的二进制输出及其解压的依赖项。因此,我能想到的一个可能的问题是带有 persistence.xml 的多个 JAR,在这种情况下,我不确定您将在最终的程序集中得到哪一个。

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

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

When using the Maven Assembly Plugin with the predefined jar-with-dependencies descriptor, you get a jar archive which contains the binary output of your project, along its the unpacked dependencies. So one possible problem I can think of would be multiple JARs with persistence.xml, in which case I'm not sure which one you'll get in the final assembly.

Since you get an error message complaining about "No Persistence provider for EntityManager named testPU", I would open the megajar and:

  • check that the persistence.xml is present (it should)
  • check that it contains the expected persistence unit testPU
    • if it doesn't, find the origin of the conflicting file and rewrite the assembly descriptor to exclude it
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文