【问题标题】:WebSphere Classloading issueWebSphere 类加载问题
【发布时间】:2025-11-20 17:55:05
【问题描述】:

我部署了一个javaee web application in IBM WebSphere v8.5.5.1,它有一个'InitialiseHelper' 类,它存在于'WEB-INF/classes/test/initialse/helper/''WEB-INF/lib/helpers.jar' 下。 我的应用程序当前引用了'WEB-INF/lib/helpers.jar' 中存在的类。

服务器设置保持默认。

我怎样才能让应用程序引用位置 'WEB-INF/classes/test/initialse/helper/' 中存在的类而不是当前类?

请帮我解决这个问题。提前致谢。

【问题讨论】:

  • 您想要的是 a) 不可能 b) 解决问题的方法。在不需要的位置删除类文件。
  • 谢谢@fnt。这在 Tomcat 中工作得非常好,我也期待在 WAS 中也是如此。如果我有重复的类,你能告诉我如何在 WAS 中加载类吗?
  • 您可以将应用程序类加载器策略设置为最后从父级加载类。这会影响你所有的类加载。
  • 通过控制台 TroubleShooting > Class loader viewer 检查类加载顺序。您将能够看到当前的加载顺序以及您的类是从哪里加载的。

标签: jakarta-ee websphere


【解决方案1】:

您可以为您的应用程序设置类加载器策略。这更容易通过支持 WebSphere 的编辑器(例如 RAD)找到和完成,但它是一个与应用程序一起部署的 xml 文件。

该文件名为deployment.xml,位于EAR 文件的META-INF/ibmconfig/cells/defaultCell/applications/defaultApp/deployments/defaultApp 中。

在那里你应该有一个名为 classloader 的行并设置了mode="PARENT_LAST"

<?xml version="1.0" encoding="UTF-8"?>
<appdeployment:Deployment xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:appdeployment="http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi" xmi:id="Deployment_1234567890123">
    <deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1234567890123" startingWeight="1">
        <modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1234567890123" startingWeight="1" uri="MyWebApp.war" classloaderMode="PARENT_LAST"/>
        <classloader xmi:id="Classloader_1234567890123" mode="PARENT_LAST"/>
    </deployedObject>
</appdeployment:Deployment>

【讨论】: