ClassNotFoundException:com.liferay.portal.kernel.model.BaseModelListener

时间:2017-07-24 09:03:57

标签: liferay osgi liferay-7 bnd bndtools

我写了一个Liferay模块:

@Component(
    immediate = true,
    service = ModelListener.class
)
public class TopMessageListener extends BaseModelListener<JournalArticle> {
    // Do stuff
}

使用此bnd.bnd

Bundle-SymbolicName: fr.free.nrw.impl
Bundle-Version: 1.0.0
Liferay-Require-SchemaVersion: 1.0.0
Import-Package: !org.apache.avalon.framework.logger, !org.apache.log \
  *

这在我的build.gradle(以及其他内容)中:

compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.6.0"
compileInclude group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'

它编译得很好,但部署失败:

ClassNotFoundException: com.liferay.portal.kernel.model.BaseModelListener cannot be found by fr.free.nrw.impl_1.0.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:444)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:357)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:349)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

如果我用compileOnly group: "com.liferay.portal"替换compileInclude group: "com.liferay.portal",错误就会消失,但我确信这不是正确的做法。如何正确修复上面的ClassNotFoundException

2 个答案:

答案 0 :(得分:0)

请尝试此依赖项 compileOnly group:&#34; com.liferay.portal&#34;,name:&#34; com.liferay.portal.kernel&#34;,version:&#34; 2.0.0&#34;

答案 1 :(得分:0)

将httpcomponents行重复为两行,一行compileOnly和一行runtime

compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.6.0"

compileOnly group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
runtime group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'

这解决了我的问题。