【发布时间】:2018-09-27 01:10:34
【问题描述】:
我写了一个只包含这个类的 Liferay 7 模块:
...
@Component(
immediate = true,
property = {
"servlet-context-name=",
"servlet-filter-name=myfilter",
"url-pattern=/*"
},
service = Filter.class
)
public class MyFilter extends BaseFilter {
...
}
它编译得很好,但是在新安装的 Liferay 7 上部署它会出现这个错误:
STARTED com.liferay.marketplace.deployer_2.0.9 [170]
STARTED mymodule_1.0.0 [668]
[mymodule:97] BundleComponentActivator : Bundle [668] Unexpected failure enabling component holder my.MyFilter
java.lang.NoClassDefFoundError: com/liferay/portal/kernel/servlet/BaseFilter
at java.lang.ClassLoader.defineClass1(Native Method)
[...]
Caused by: java.lang.ClassNotFoundException: com.liferay.portal.kernel.servlet.BaseFilter cannot be found by mymodule_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)
... 48 more
我做错了什么?
这是我模块的build.gradle:
dependencies {
compileOnly group: "biz.aQute.bnd", name: "biz.aQute.bndlib", version: "3.1.0"
compileOnly group: "com.liferay", name: "com.liferay.osgi.util", version: "3.0.0"
compileOnly group: "com.liferay", name: "com.liferay.portal.spring.extender", version: "2.0.0"
compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
compileOnly group: "com.liferay", name: "com.liferay.portal.security.audit.api", version: "2.0.0"
compileOnly group: "com.liferay", name: "com.liferay.portal.configuration.metatype", version: "2.0.0"
compileOnly group: "com.liferay", name: "com.liferay.document.library.web", version: "1.0.10"
compileOnly group: "org.osgi", name: "org.osgi.compendium", version: "5.0.0"
compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
compileOnly group: "javax.servlet", name: "servlet-api", version: "2.5"
compileOnly group: "org.osgi", name:"org.osgi.service.component.annotations", version:"1.3.0"
}
【问题讨论】:
-
假设您使用的是 Liferay Workspace/gradle:您为这个项目声明的依赖项是什么?只编译?
-
@OlafKock:我添加了我的
build.gradle。 -
您可以尝试将 Neil 推荐的 Import-Package 添加到 bnd.bnd 文件中,看看它是否有效。我发现有时我必须将依赖项添加到 build.gradle 和 bnd.bnd 文件中,有时只添加到这些文件中的一个以用于不同类型的 Liferay 模块项目。我还不确定为什么。如果错误仍然存在,请尝试使用 build.gradle 文件中的“编译组:”。祝你好运。我知道我的模块也遇到过类似的问题。
标签: liferay osgi servlet-filters liferay-7