我们用Maven创建liferay应用(比如portlet,theme)时,常常有个版本选择,如图:
默认的“Show the last version of Archetype only” 是被选中的,这时候我们只能显示最新版本的archetype,如果我们用最新版本的archetype开发应用,则最终当应用部署到低版本的容器中(比如我们目标的liferay server版本是6.1.0),就会出以下的错误:
- Copying portlets for /app/Liferay/RI/liferay-portal-6.1.0-ce-ga1/deploy/paas_integration_portlet.war
- 03:11:17,971 ERROR [AutoDeployDir:197] com.liferay.portal.kernel.deploy.auto.AutoDeployException: com.liferay.portal.kernel.deploy.auto.AutoDeployException: paas_integration_portlet.war does not support this version of Liferay
- com.liferay.portal.kernel.deploy.auto.AutoDeployException: com.liferay.portal.kernel.deploy.auto.AutoDeployException: paas_integration_portlet.war does not support this version of Liferay
错误分析:
显然,错误提示是低版本(6.1.0)的liferay 容器的PortletAutoDeployListener当探测到${liferay.home}/deploy 目录中有我们maven 部署上去的portlet应用时,因为看到portlet应用版本高于liferay容器自己的处理能力,所以无法处理。
验证猜想:
我们查看portlet应用的WEB-INF/liferay-plugin-package.xml文件,果然发现,应用的版本太高(6.1.0)
解决这个部署这个portlet到容器的方法:
当我们把portlet的版本号改到低于(或者等于)liferay容器的版本号时(也就是吧这个<liferay-version>元素从6.1.10改为6.1.0),问题就解决了。
更通用的解决方法:
为了防止以后的错误发生,在我们用maven向导创建portlet时,请关闭Show the last version of Archetype only 选项,这样我们的应用版本就可以选择了,我们选择低于目标服务器版本号的版本,就不会出类似错误了。
本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/899409,如需转载请自行联系原作者