我遇到了在JBOSS 10.1.2上部署EAR的问题
我得到了一个愚蠢的例外:
Caused by: org.hibernate.boot.archive.spi.ArchiveException: Could not build ClassFile
at org.hibernate.boot.archive.scan.spi.ClassFileArchiveEntryHandler.toClassFile(ClassFileArchiveEntryHandler.java:64)
at org.hibernate.boot.archive.scan.spi.ClassFileArchiveEntryHandler.handleEntry(ClassFileArchiveEntryHandler.java:47)
at org.jboss.as.jpa.hibernate5.VirtualFileSystemArchiveDescriptor.processVirtualFile(VirtualFileSystemArchiveDescriptor.java:94)
at org.jboss.as.jpa.hibernate5.VirtualFileSystemArchiveDescriptor.processVirtualFile(VirtualFileSystemArchiveDescriptor.java:69)
at org.jboss.as.jpa.hibernate5.VirtualFileSystemArchiveDescriptor.processVirtualFile(VirtualFileSystemArchiveDescriptor.java:69)
at org.jboss.as.jpa.hibernate5.VirtualFileSystemArchiveDescriptor.visitArchive(VirtualFileSystemArchiveDescriptor.java:49)
at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:47)
at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:75)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:98)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:199)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:149)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:28)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:40)
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.<init>(TwoPhaseBootstrapImpl.java:39)
at org.jboss.as.jpa.hibernate5.HibernatePersistenceProviderAdaptor.getBootstrap(HibernatePersistenceProviderAdaptor.java:159)
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl.createContainerEntityManagerFactoryBuilder(PhaseOnePersistenceUnitServiceImpl.java:242)
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl.access$800(PhaseOnePersistenceUnitServiceImpl.java:59)
at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1$1.run(PhaseOnePersistenceUnitServiceImpl.java:117)
... 7 more
我在网上看了一下,发现这个例外的原因是 javassist版本不同。
this post on stackoverflow中的答案没有用,因为我既不使用Spring,也不使用Weblogic,也不使用Thymyleaf。
有两个库使用javassist: Hibernate 和 org.reflections 。使用Maven依赖树我可以找到以下内容:
org.reflections
[INFO] | +- org.reflections:reflections:jar:0.9.11:compile
[INFO] | | +- (com.google.guava:guava:jar:20.0:compile - omitted for conflict with 21.0)
[INFO] | | \- (org.javassist:javassist:jar:3.21.0-GA:compile - omitted for conflict with 3.20.0-GA)
Hibernate :
[INFO] | | +- org.hibernate:hibernate-core:jar:5.2.8.Final:provided
[INFO] | | | +- (org.jboss.logging:jboss-logging:jar:3.3.0.Final:provided - omitted for conflict with 3.1.4.GA)
[INFO] | | | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:provided
[INFO] | | | +- org.javassist:javassist:jar:3.20.0-GA:provided
我的lib
EAR文件夹包含
hibernate-core-5.2.8.Final.jar
javassist-3.20.0-GA.jar
JBOSS还有一个带
的javassists模块javassist-3.18.1.GA-redhat-2.jar
现在我对整个问题有点困惑。我尝试删除 org.reflections 的引用,但部署仍然失败。
有人有想法吗?
修改
好的,我发现哪个库导致异常:
<dependency>
<groupId>com.google.template</groupId>
<artifactId>soy</artifactId>
<version>2018-01-03</version>
</dependency>
但我不知道如何解决这个问题。
修改
好的,我尝试使用以前的maven版本的图书馆(2017-08-08),它的确有效。不知道问题是什么。应该可以在Github上向图书馆老板报告。如果有人有想法,欢迎你。
答案 0 :(得分:1)
@@ GlenPeterson在评论中提到:
我遇到了这个问题,并将maven-shade-plugin从2.4.3升级到3.1.1修复了它。
将maven-shade-plugin从2.4.3升级到3.2.1(现在是最新版本)是可行的。我看到阴影插件创建了一个稍小的uber jar。
答案 1 :(得分:0)
问题是由javassist冲突引起的
mvn dependency:tree
,找到包含Javassist的jar <dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxxx</version>
<exclusions>
<!-- 排除javassist-->
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>