Hibernate JPA和一罐

Hibernate JPA和一罐,hibernate,jpa,onejar,Hibernate,Jpa,Onejar,我有一个使用JPA和Hibernate ORM 4.3.8的应用程序 当我将此应用程序及其依赖项打包到一个带有一个jar的可执行jar中并尝试创建EntityManagerFactory时,Hibernate会引发以下异常: javax.persistence.PersistenceException: Unable to build entity manager factory at org.hibernate.jpa.HibernatePersistenceProvider.

我有一个使用JPA和Hibernate ORM 4.3.8的应用程序

当我将此应用程序及其依赖项打包到一个带有一个jar的可执行jar中并尝试创建EntityManagerFactory时,Hibernate会引发以下异常:

javax.persistence.PersistenceException: Unable to build entity manager factory
        at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:83)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) 
        ...
        Caused by: java.lang.IllegalArgumentException: File [/target/myapplication.one-jar.jar!/main/myapplication.jar] referenced by given URL [file:/target/myapplication.one-jar.jar!/main/myapplication.jar] does not exist
        at org.hibernate.jpa.boot.archive.internal.StandardArchiveDescriptorFactory.buildArchiveDescriptor(StandardArchiveDescriptorFactory.java:73)
        at org.hibernate.jpa.boot.archive.internal.StandardArchiveDescriptorFactory.buildArchiveDescriptor(StandardArchiveDescriptorFactory.java:48)
        at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.buildArchiveDescriptor(AbstractScannerImpl.java:95)
        at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:70)
我正在使用onejar maven插件版本1.4.5生成myapplication-one-jar.jar

我真的很感激你能给我一些建议来解决这个问题。 以下是两种可能的选择:

使用一个jar以外的工具来创建可执行的fat jar。备选方案可能有同样的问题。 创建一个与类似的自定义类加载器,但我找不到让JPA和Hibernate使用这个类加载器的方法。
谢谢。

从使用一个Jar切换到使用Maven Shade修复了这个问题,尽管它有需要解决冲突类名的缺点。

您的问题提到了“myapplication One Jar.Jar”。但是stacktrace有“myapplication.one jar.jar”和“myapplication.jar”。你已经调查过了吗?@sgp15抱歉搞混了。jar并不是真正命名为myapplication。我试图通过更改名称使堆栈跟踪更具可读性。罐子的名称正确。在我将JPA/hibernate引入应用程序之前,one-jar解决方案一直运行良好。