1

我有一个使用 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-plugin 版本 1.4.5 来生成 myapplication-one-jar.jar

我非常感谢有关解决此问题的方法的建议。这里有两个可能的选项:

  1. 使用 one-jar 以外的工具创建可执行的 fat jar。替代品可能有同样的问题。
  2. 创建一个与此类似的自定义类加载器,但我找不到让 JPA 和 Hibernate 使用此类加载器的方法。

谢谢你。

4

1 回答 1

0

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

于 2015-04-13T18:30:51.203 回答