引起:org.dom4j.DocumentException:org.dom4j.DocumentFactory无法强制转换为org.dom4j.DocumentFactory

The*_*der 4 deployment jboss war dom4j wildfly-8

我有一个使用hibernate> 4的gradle项目.如果我在Apache tomcat中运行我的war文件,我不会收到任何错误.但是当我在Wildfly 8.2中部署它时,我得到以下异常

Caused by: org.hibernate.InvalidMappingException: Error while parsing file: /G:/wildfly-8.2.0.Final/bin/content/mywar-1.0.war/WEB-INF/classes/com/mysite/
hbm/Role.hbm.xml
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildHibernateConfiguration(EntityManagerFactoryBuilderImpl.java:1182) [hibernate-ent
itymanager-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:848) [hibernate-entitymanager-4.3.7.Fi
nal.jar:4.3.7.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845) [hibernate-entitymanager-4.3.7.Fi
nal.jar:4.3.7.Final]
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398) [hibernate-core-4.3.7.Final.jar:4.
3.7.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844) [hibernate-entitymanager-4.3.7.Final.
jar:4.3.7.Final]
        at org.jboss.as.jpa.hibernate4.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44) [jipijapa-hibernate4-3-1.0.1.Final.jar:]
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
        ... 8 more
Caused by: org.hibernate.InvalidMappingException: Unable to read XML
        at org.hibernate.internal.util.xml.MappingReader.legacyReadMappingDocument(MappingReader.java:375) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:304) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.cfg.Configuration.add(Configuration.java:518) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.cfg.Configuration.add(Configuration.java:514) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.cfg.Configuration.add(Configuration.java:688) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:726) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildHibernateConfiguration(EntityManagerFactoryBuilderImpl.java:1177) [hibernate-ent
itymanager-4.3.7.Final.jar:4.3.7.Final]
        ... 14 more
Caused by: org.dom4j.DocumentException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory Nested exception: org.dom4j.DocumentFactory cannot
 be cast to org.dom4j.DocumentFactory
        at org.dom4j.io.SAXReader.read(SAXReader.java:484) [dom4j-1.6.1.jar:1.6.1]
Run Code Online (Sandbox Code Playgroud)

我只是在我的Gradle文件中添加了一个排除项

runtime.exclude group: "dom4j" 
Run Code Online (Sandbox Code Playgroud)

现在,当我运行gradle build时,不会在war文件中创建dom4j.jar.现在我可以运行我的部署并在Wildfly 8.2上成功运行我的项目而没有任何错误.但真正的问题从这里开始.

我的项目的一个特点是,它会将file.xlsm复制到anotherfile.xlsm,我在那里使用像Apache Poi这样的jar用于这些目的.在这里,Apache Poi试图在文件处理期间访问dom4j.jar中的方法,它会导致以下错误

18:40:13,261 ERROR [io.undertow.request] (default task-29) UT005023: Exception handling request to /app/parentPath/myAction: org.springframework.web.util.NestedSe
rvletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
        at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) [spring-webmvc-4.1.4.RELEASE.jar:4.1.4
.RELEASE]
Run Code Online (Sandbox Code Playgroud)

任何想法如何在我的类路径中永久使用dom4j.jar?我搜索了很多问题,他们中的大多数建议从classpath中删除dom4j.我通过从类路径中删除它来成功运行我的程序,但是在excel文件处理过程中会导致上述错误.浪费了一天多的时间.. !! 是否有可能在我的类路径中包含dom4j.jar?

更新:

我在MANIFEST.MF文件中做了一个小技巧.我打开了mywar.war> META-INF> MANIFEST.MF

并在文件末尾添加了Dependencies:org.dom4j export并保存.因此,如果我部署我的war文件,我成功运行它没有任何错误.

有人可以解释我在我的src /文件中添加这种属性的位置,以便在gradle构建后自动将其添加到MANIFEST.MF中.

Ken*_*ira 6

当你在你的战争中包含一个与野生飞行器不同的hibernate lib时,通常会发生wildfly上的这个例外,因为你正在部署到wildfly,它已经包含了hibernate,所以你可以像gradle中提供的那样设置你的生活,也就是在编译提供和部署时没有输出依赖.如果你仍然有同样的错误尝试声明对清单的hibernate依赖,但保持lib提供它应该工作正常.