【问题标题】:ClassNotFoundException: com.liferay.portal.kernel.servlet.BaseFilter cannot be found by mymoduleClassNotFoundException: com.liferay.portal.kernel.servlet.BaseFilter 无法被 mymodule 找到
【发布时间】: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


【解决方案1】:

这个错误意味着你的包应该导入包com.liferay.portal.kernel.servlet

OSGi 包只能从它们直接包含或使用 Import-Package 清单头显式导入的包中加载。

【讨论】:

    【解决方案2】:

    我认为您的 jar Manifest 缺少 com.liferay.portal.kernel.servlet 的包导入。

    您如何创建捆绑包?

    导致这种情况的典型错误是手动配置导入的包并错过 ,* 以启用 bnd 自动分析导入。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2020-07-29
      • 2014-02-04
      • 2017-04-14
      • 1970-01-01
      相关资源
      最近更新 更多