我收到错误:
Caused by: java.lang.ClassCastException: com.xxx.JbossBirtPortlet cannot be cast to javax.portlet.Portlet
at org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.start(PortletContainerImpl.java:254)
错误是由于tomcat和我的portlet的类加载器冲突,根据这些链接加载文件portlet.jar: https://community.jboss.org/thread/81246?tstart=0
Deploying a simple Portlet to Liferay - ClassCastException
然后问题: 我需要portlet.jar来构建我的战争,但我的战争不能包含portlet.jar,因为这会产生一个ClassLoader冲突。我无法从tomcat中删除portlet.jar,因为它需要其他portlet。
那么我该如何解决这个问题?
答案 0 :(得分:2)
然后问题:我需要portlet.jar来建立我的战争,但我的战争必须 不包含portlet.jar,因为这会产生ClassLoader冲突.I 无法从tomcat中删除portlet.jar,因为它需要其他 的portlet。
正确,如果应用程序服务器提供这些类,则不应在WAR中包含这些类。
如果您正在使用Maven,请将您对portlet API的依赖关系标记为<scope>provided</scope>
。它在构建WAR时可用,但不会包含在WAR中。如果你没有使用Maven,RTFM来了解如何使用你的构建工具实现类似的功能。
答案 1 :(得分:0)
解决方案是“重命名”jar中的类。别担心,这不是那么难。这实际上非常简单。但这需要大约15到45分钟的学习时间。
您需要的工具称为JarJarLinks。它会复制你的jar,但所有冲突的名字都会被重命名。这里解释的有点太多,但here是一个简单的例子。
提示:如果您不确定冲突究竟是什么,那么还有另一个很棒的工具可以为您提供一个很好的依赖报告。它被称为Tattletale。