有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

这是我的坚持。位于meta inf目录下的xml:

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


共 (3) 个答案

  1. # 1 楼答案

    你的图书馆可能有问题。。试着在下面做

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

    清单版本:1.0 Ant版本:ApacheAnt 1.7.0 创建人:1.6.0_03-b05(太阳微系统公司) 主要类别: 类路径:lib/。jar lib/。jar lib/。罐子

  2. # 2 楼答案

    我记得有过这个问题,我想问题是你不能在罐子里引用罐子。对于外部库,它们需要在jar中扩展,或者位于系统类路径的其他位置。既然你没有说明你在罐子里放了什么,我就赌这一个

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

  3. # 3 楼答案

    Maven Assembly Plugin与预定义的^{}描述符一起使用时,会得到一个jar归档文件,其中包含项目的二进制输出,以及它的解包依赖项。因此,我能想到的一个可能的问题是多个带有persistence.xml的jar,在这种情况下,我不确定在最终组装中会得到哪一个

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

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