JPA和One-jar

时间:2015-04-13 02:37:09

标签: hibernate jpa onejar

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

当我将这个应用程序及其依赖项打包到一个带有one-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-plugin 1.4.5版来生成myapplication-one-jar.jar

我真的很感激有关如何解决这个问题的建议。 以下是两种可能的选择:

  1. 使用one-jar以外的工具创建可执行的fat jar。替代方案可能存在同样的问题。
  2. 创建一个类似于this的自定义类加载器,但我无法找到获得JPA&的方法。 Hibernate使用这个类加载器。
  3. 谢谢。

1 个答案:

答案 0 :(得分:0)

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