【发布时间】:2017-12-26 20:11:34
【问题描述】:
这是一个奇怪的问题。我有一个现有 JEE 项目,是并且已经在 WebSphere 7 上生产。它是一个多模块 EAR 文件。它有 2 个 WAR 和 1 个共享 Java 项目。其中大部分是基于 Spring 4 的,但我们有一些使用 axis2 (1.5.4) 托管的 Web 服务。此项目不使用 Maven。它确实使用了带有 warClassloaderPolicy="SINGLE" 和类加载器模式="PARENT_LAST" 的 WebSphere deployment.xml(在 EAR 中)。这控制此 EAR 的类加载器策略。 Java 项目和 WAR 所依赖的所有 jar 文件都存储在 EAR 级别,并通过清单文件在模块级别进行引用。这一切都很好,已经有好几年了。
经过这么多年,现在我试图将这个项目转换为 Maven 项目。最初,我像往常一样保留了 deployment.xml 文件设置。但是有了这些设置,我得到了:
java.lang.VerifyError at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl "org.springframework.oxm.jaxb.Jaxb2Marshaller".
在这个网站上进行了多次谷歌搜索并尝试了 50,000 种方法后,我尝试了一种方法,该方法适用于 大多数 应用程序。我将类加载器模式切换为“PARENT_FIRST”,突然间,专门使用 Spring 4 的 WAR 工作了。它启动没有错误,我能够运行它。
但是,托管axis2 Web服务的另一个WAR开始出现错误:
org.apache.axis2.deployment.WarBasedAxisConfigurator <init> org.apache.commons.fileupload.FileUploadException....Caused by: java.lang.NoClassDefFoundError: org.apache.commons.fileupload.FileUploadException....Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException
这个类 (org.apache.commons.fileupload.FileUploadException) 在 compile 和 runtime 类路径中。在 eclipse 中,我可以在 m2e eclipse 插件从 POM 文件创建的“Maven Dependencies”库中看到它。我还可以在 WebSphere 运行时模块类路径检查器中看到这个 jar(它在那里显示了 3 次!在每个 WAR 下一次,一次在 Maven 存储库位置的列表中。)
需要注意的一点是,我已经为项目配置了一个父 POM,其中大部分依赖项在父 POM 中声明,然后为每个模块继承。在 EAR 项目中,POM 使用 skinnyWars=true 的 maven-ear-plugin。然而,当 m2e eclipse 插件将 EAR 部署到本地 WebSphere 服务器时,似乎不遵守 skinnyWars 指令(这很明显,因为我看到这些 jars 出现在类路径中 3 次)。但是当我使用 Maven 构建创建 EAR 时,EAR 会正确显示,每个 jar 只会在 EAR 中显示一次。
这是我最后的希望,在这里发布一些东西,看看是否有人有想法可以尝试,否则我想不出其他可以尝试的东西。
谢谢...
【问题讨论】:
标签: spring eclipse maven axis2 websphere-7