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的经验,我不知道我是否遗漏了什么,所以如果你有任何想法,我会很高兴听到他们
# 1 楼答案
你的图书馆可能有问题。。试着在下面做
清单版本:1.0 Ant版本:ApacheAnt 1.7.0 创建人:1.6.0_03-b05(太阳微系统公司) 主要类别: 类路径:lib/。jar lib/。jar lib/。罐子
# 2 楼答案
我记得有过这个问题,我想问题是你不能在罐子里引用罐子。对于外部库,它们需要在jar中扩展,或者位于系统类路径的其他位置。既然你没有说明你在罐子里放了什么,我就赌这一个
如果使用-jar参数运行jar,则不能使用-cp命令行参数。一个或另一个
# 3 楼答案
将Maven Assembly Plugin与预定义的^{} 描述符一起使用时,会得到一个jar归档文件,其中包含项目的二进制输出,以及它的解包依赖项。因此,我能想到的一个可能的问题是多个带有
persistence.xml
的jar,在这种情况下,我不确定在最终组装中会得到哪一个由于您收到一条错误消息,抱怨“EntityManager没有名为testPU的持久性提供程序”,我会打开megajar并:
persistence.xml
是否存在(它应该)testPU