摇篮说“时,MyPortlet是不能分配给指定的服务com.liferay.portal.kernel.model.Portlet”

问题描述:

我得到这个摇篮错误:摇篮说“时,MyPortlet是不能分配给指定的服务com.liferay.portal.kernel.model.Portlet”

> Task :jar 
[Class my.MyPortlet is not assignable to specified service com.liferay.portal.kernel.model.Portlet] 

...这个极简的Liferay 7门户(简化的the official documentation):

package my; 

import com.liferay.portal.kernel.model.Portlet; 
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet; 
import org.osgi.service.component.annotations.Component; 

@Component(
    service = Portlet.class 
) 
public class MyPortlet extends MVCPortlet { 
} 

在调试模式下运行摇篮不给我更多的线索:

[aQute.bnd.osgi.Builder] parseClassFile(): path=javax.portlet.PortletRequest resource=:/home/nico/.gradle/caches/modules-2/files-2.1/javax.portlet/portlet-api/2.0/1cd72f2a37fcf8ab9893a9468d7ba71c85fe2653/portlet-api-2.0.jar(javax/portlet/PortletRequest.class): 
[aQute.bnd.osgi.Builder] end 
[aQute.bnd.osgi.Builder] begin [email protected] 
[aQute.bnd.osgi.Builder] end 
[aQute.bnd.osgi.Builder] begin com.lif[email protected]4e811a19 
[aQute.bnd.osgi.Builder] end 
[aQute.bnd.osgi.Builder] parseClassFile(): path=my/MyPortlet.class resource=/home/nico/my/build/classes/java/main/my/MyPortlet.class 
[aQute.bnd.osgi.Builder] begin [email protected] 
[aQute.bnd.osgi.Builder] end 
[aQute.bnd.osgi.Builder] begin [email protected] 
[aQute.bnd.osgi.Builder] end 
[aQute.bnd.osgi.Builder] begin [email protected] 
[aQute.bnd.osgi.Builder] end 
[aQute.bnd.osgi.Builder] begin [email protected] 
[aQute.bnd.osgi.Builder] end 
[aQute.bnd.osgi.Builder] begin [email protected]45 
[aQute.bnd.osgi.Builder] end 
[aQute.bnd.osgi.Builder] parseClassFile(): path=my/MyPortlet.class resource=/home/nico/my/build/classes/java/main/my/MyPortlet.class 
[aQute.bnd.osgi.Verifier] Trying pre-plugin com.liferay.ant.bnd.jsp.JspAnalyzerPlugin 
[aQute.bnd.osgi.Verifier] Trying pre-plugin com.liferay.ant.bnd.npm.NpmAnalyzerPlugin 
[aQute.bnd.osgi.Verifier] Trying pre-plugin com.liferay.ant.bnd.resource.bundle.ResourceBundleLoaderAnalyzerPlugin 
[aQute.bnd.osgi.Verifier] Trying pre-plugin com.liferay.ant.bnd.sass.SassAnalyzerPlugin 
[aQute.bnd.osgi.Verifier] Trying pre-plugin com.liferay.ant.bnd.service.ServiceAnalyzerPlugin 
[aQute.bnd.osgi.Verifier] Trying pre-plugin com.liferay.ant.bnd.social.SocialAnalyzerPlugin 
[aQute.bnd.osgi.Verifier] Trying pre-plugin aQute.lib.spring.SpringComponent 
[aQute.bnd.osgi.Verifier] Trying pre-plugin com.liferay.ant.bnd.spring.SpringDependencyAnalyzerPlugin 
[org.dm.gradle.plugins.bundle.JarBuilder] [Class my.MyPortlet is not assignable to specified service com.liferay.portal.kernel.model.Portlet] 

咕gle只有9个结果“不能指定给指定的服务”。

我在做什么错?

与源导入:

import com.liferay.portal.kernel.model.Portlet;

然后:

@Component( service = Portlet.class )

你声称你的MyPortlet类实现com.liferay.portal.kernel.model.Portlet。但事实并非如此。 com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet执行javax.portlet.Portlet

更改您的源输入从com.liferay.portal.kernel.model.Portlet更改为javax.portlet.Portlet

+0

谢谢,我刚刚发现它,并在几分钟前发布了一个关于它的答案。 –

aQute.bnd.component.AnnotationReader试图解析service = Portlet.class部分,问题是aQute.bnd.osgi.Analyzer.assignable(MyPortlet,com.liferay.portal.kernel.model.Portlet)返回false。

让我们跟随的类层次结构:

的问题portlet实现

com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet

com.liferay.portal.kernel.portlet.LiferayPortlet

javax.portlet.GenericPortlet

javax.portlet.Portlet

这提示我们导入语句是错误的。它应该是:

import javax.portlet.Portlet; 

...而不是:

import com.liferay.portal.kernel.model.Portlet; 

将其固定后,构建成功。