When deploying a war-styled plugin with listener-classes declared in web.xml, the deployed plugin does not work as expected.
WAR-styled plugins are processed by Liferay's WAB Generator during deployment.
Based on the documentation, the listener-classes declared should have their packages added under the Import-Package header in the WAB's META-INF/MANIFEST.MF file.
The WAB Generator detects packages a plugin's JSPs and descriptor files reference. The descriptor files include web.xml, liferay-web.xml, portlet.xml, liferay-portlet.xml, and liferay-hook.xml. The WAB Generator verifies whether the detected packages are in the plugin's WEB-INF/classes folder or in a JAR file in the plugin's WEB-INF/lib folder. Packages that aren't found in either location are added to an Import-Package header in the WAB's META-INF/MANIFEST.MF file.
Since the packages of the declared listener-classes are not added to the Import-Package header, a ClassNotFoundException is being thrown.
Steps to Reproduce
- Startup Liferay
- Deploy the attached wab-import-poc.war
- Observe log
- Expected Result: The bundle will boot successfully
- Actual Result: ClassNotFoundException is thrown
- Shutdown Liferay
- Include the following portal property:
- Restart Liferay and wait till it starts up completely
- Re-deploy the attached wab-import-poc.jar
- Notice: ClassNotFoundException is no longer thrown.
Attached is a POC war-styled plugin that was generated using Liferay Blade's: WAR MVC Portlet template.
The only change was modifying web.xml to include the following listener-class tag:
<listener> <listener-class>com.liferay.portal.kernel.spring.context.PortletContextLoaderListener</listener-class> </listener>
Attached is also the source: wab-import-poc-src.zip