繁体   English   中英

2个具有相同名称的类在WebSphere Portal的Portlet中的不同jar中

[英]2 classes with same name in different jar's in portlet for WebSphere portal

我正在研究一个portlet项目,并且在不同的.jar文件中遇到了两个同名类(包括包)的问题。 我将com.ibm.ws.webcontainer.jar作为默认的WebSphere库,并将jsf-impl.jar作为某些JSF功能所必需的。
PortletFacesContextFactoryImpl类(另一个JSF类)尝试获取对com.sun.faces.util.Util.parameterNonNull(Object arg)方法的访问PortletFacesContextFactoryImpl出现了问题,并且出现了NoSuchMethodError
我尝试将类加载器策略设置为PARENT_LAST,这没有帮助。 我无法从服务器中删除com.ibm.ws.webcontainer.jar ,但是当我尝试在我的代码中使用Util类时,唯一的选择是从其中的类,而不是jsf-impl.jar jsf-impl.jar包含在Java构建路径中。

由于无法更改PortletFacesContextFactoryImpl源和使用错误的类移动.jar,如何解决此问题?

上一个父母应该是您的解决方案。 WebSphere Portal部署portlet应用程序时默认使用Parent Last,但是在WebSphere Application Server集成解决方案控制台(管理控制台)>再次检查它不会有任何问题。

但是,这还取决于您的Portlet应用程序设置。 我以为是com.sun.faces.util.Util困扰着您。 在我的系统上,此类位于jsf-impl.jar和Application Server Web容器中 为了使其正常工作,需要将jsf-impl.jar放置在portlet应用程序的WEB-INF/lib目录中。 要验证这一点,请使用WAS的类加载器视图:管理控制台>故障排除>类加载器查看器> WebSphere_Portal>应用程序,然后使用您的Portlet应用程序。 它必须以PA开头。 切换到表格视图并搜索类。

您还提到了Java Build Path 这是另一个主题,取决于您的IDE-可能是Eclipse。 检查“ 订购和出口”选项卡,应将jsf-impl.jar放在顶部,以便它覆盖服务器运行时类路径条目。

PARENT_LAST类路径设置将为您提供帮助。 但是,要完成此设置,您的portlet muste必须打包为EAR。 如果您将portlet打包打包,并且您手动配置了classpath设置,则每次部署该Portlet时,它们都会被删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM