升级了某些Glassfish / Grizzly依赖关系(为了与Azure的SDK IOT设备客户端的最新版本兼容)之后,由于com.google.common.EventBus不再存在,我开始收到错误消息。添加依赖项:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>15.0</version>
</dependency>
解决了该问题,它能够在IntelliJ中本地运行。但是,当我将已编译为.asp的.deb文件部署到Raspberry Pi时,它开始产生错误:
java.lang.NoClassDefFoundError:javax / inject / Provider 在com.google.inject.internal.MoreTypes.canonicalizeForKey(MoreTypes.jav a:81) com.google.inject.Key。(Key.java:119) 在com.google.inject.Key.get(Key.java:212) 在com.google.inject.spi.Elements $ RecordingBinder.bind(Elements.java:262 ) 在com.google.inject.internal.InjectorShell $ RootModule.configure(InjectorShell.java:276) 在com.google.inject.spi.Elements $ RecordingBinder.install(Elements.java:223) 在com.google.inject.spi.Elements.getElements(Elements.java:101) 在com.google.inject.internal.InjectorShell $ Builder.build(InjectorShell.java:133) 在com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103) 在com.google.inject.Guice.createInjector(Guice.java:95) 在com.google.inject.Guice.createInjector(Guice.java:72) 在com.google.inject.Guice.createInjector(Guice.java:62) com.infusion.empm.Main.main(Main.java:32)上的原因:java.lang.ClassNotFoundException:javax.inject.Provider 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)
我在很多地方都读到了添加依赖项
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
应该解决此问题(我已经将guice和javax-servlet-api依赖项引用为here),但没有任何效果。当我这样做时,结果是两个javax.inject jars(另一个生成的jar似乎可以解释为什么我不需要显式添加版本1使其在本地运行):
javax.inject-2.5.0-b42.jar
javax.inject-1.jar
Someone else here在有两个jar时使用了排除项,但是即使我相应地更改了hk2依赖关系,两个jar仍然存在。我还听说添加javax.ws.rs-api应该会有所帮助,但这已经存在。 Java代码中的导入直接引用com.google.inject.Provider,因此我认为不需要调用guicify将JSR-330提供程序转换为Guice提供商。用“ java.inject”替换本地代码中的每个“ com.google.inject”导入都会导致相同的确切行为,因此它必须是引用Google代码的依赖项,从而导致无法找到javax。
答案 0 :(得分:0)
事实证明,原因是Pi上的脚本将类路径中的jar硬编码。