我遇到了让Peaberry / Guice / OSGi / Servlets放好的问题。首先,我一直在将基于Jetty的WAR部署的webapp迁移到OSGi,以利用插件架构。我原来的应用程序到处使用guice。
我已将所有内容分解为模块,Maven-iszed构建。除了烦人的ServletModule安装外,一切似乎都在工作。
当我尝试安装ServletModule时收到以下异常:
java.lang.NoClassDefFoundError: com/google/inject/internal/util/$Preconditions
at com.google.inject.servlet.ServletModule.configure(ServletModule.java:44)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
at com.google.inject.AbstractModule.install(AbstractModule.java:118)
at com.payplum.CoreActivator$CoreImportModule.configure(CoreActivator.java:145)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
at com.google.inject.spi.Elements.getElements(Elements.java:101)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:133)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
at com.payplum.CoreActivator.start(CoreActivator.java:53)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
所以我不清楚它为什么没能找到这些捆绑包。我已经添加了guice-servlet依赖项,并且已经验证它正在将其部署到我已部署的bundle中。
我想另一个重要的是注册GuiceFilter。我使用ServiceTracker来获取ExtHttpService,因为我正在使用Jetty。当Tracker返回时,我使用典型的调用
添加注册service.registerFilter( this.guiceFilter, "/*", null, 0, null );
这似乎工作正常。我真的很努力让这些东西起作用,我在Guice / OSGi / Peaberry部分中间有点陷入困境。非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
异常意味着你在类路径上缺少一个类,所以你要么缺少一个罐子,要么其中一个罐子(令人惊讶的是)不包括它所需的类。检查最终war文件中包含的JAR,例如使用'jar -tf thejar.jar
'来确定它们是否包含$ Preconditions类。