我在获取Peaberry/Guice/OSGi/Servlets时遇到了一个问题。首先,我一直在将一个基于Jetty的、部署了WAR的webapp迁移到OSGi上,以利用插件架构。我最初的应用程序是到处使用guice。
我已经将所有东西都分解成模块,并对构建进行了Maven-is化。除了繁琐的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依赖项,并且已经验证它是否可以加入到我部署的包中。
我想另一件重要的事情是注册GuiceFilter。我使用ServiceTracker来获取ExtHttpService,因为我使用的是Jetty。当该跟踪器返回时,我使用典型的调用将其注册出来
service.registerFilter( this.guiceFilter, "/*", null, 0, null );这似乎工作得很好。我真的很难让这些东西工作,我有点夹在Guice/OSGi/Peaberry之间。任何帮助都是非常感谢的。
谢谢!
发布于 2012-08-27 01:53:08
异常意味着您的类路径上缺少一个类,因此您要么缺少一个jar,要么某个jar(令人惊讶的)没有包括它所需的类。检查最终war文件中包含的JAR,例如,使用'jar -tf thejar.jar‘检查它们是否包含$Preconditions类。
https://stackoverflow.com/questions/12054898
复制相似问题