【发布时间】:2016-10-21 13:43:12
【问题描述】:
我必须从 RAD 9.5 和 maven 构建一个项目(Parent 和 EAR,其中包含 jar、ejb 和 2 个 war 模块)。
当我从 Maven 命令行构建项目时,一切正常。它正在创建在 WebSphere 8.5.5 上运行的瘦战争档案。
当尝试从 RAD 更新项目或导出 EAR 时,我得到的文件不同且无法工作,ClassNotFoundException 用于 EJB 的依赖项之一。
进一步看,我发现类路径部分的 MANIFEST.MF 有所不同。 Maven 项目将带有 lib/ 前缀和 m2e/RAD 的实例放在那里,如下所示:
Class-Path: lib/log4j-api-2.6.jar lib/log4j-core-2.6.jar lib/junit-4.12.jar lib/hamcrest-core-1.3.
在纯 maven 中:
Class-Path: log4j-api-2.6.jar log4j-core-2.6.jar junit-4.12.jar hamcrest-core-1.3.
我尝试更新一个项目,使用 pom.xml 中的设置进行设置。这是我最接近工作应用程序的地方。
我当前的 ejb 插件配置:
<plugin>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.5</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
<ejbVersion>3.1</ejbVersion>
</configuration>
</plugin>
还有异常(最低级别):
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.net.URLClassLoader.findClass(URLClassLoader.java:600)
at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:243)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:786)
at java.lang.ClassLoader.loadClass(ClassLoader.java:764)
at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:741)
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585)
at java.lang.ClassLoader.loadClass(ClassLoader.java:741)
... 75 more
我想这是问题所在,但我不知道如何修复它。
更新: 尝试添加到清单部分:
<classpathPrefix>lib/</classpathPrefix>
同样的结果。
【问题讨论】:
-
如果你创建一个支持瘦战争的 EAR 文件,那些被提取的文件必须位于某个地方,这意味着如果 EAR 进入 EAR 级别的 lib 文件夹。我不知道 RAD 在这里做什么......
-
是的,他们在那里。只是没有从任何地方引用。另外,请参阅更新问题。
-
如果您已部署 EAR 文件,Websphere 应用程序服务器会发出异常?
-
是的。我可能会发布整个异常,但我很确定核心异常就是我提出的问题。
-
你部署的EAR文件是用Maven还是RAD构建的?
标签: java maven jakarta-ee m2e