java - "NoClassDefFoundError: javax/inject/Provider"即使包含 javax.inject 依赖项

标签 java dependency-injection guice grizzly

在升级了一些 Glassfish/Grizzly 依赖项之后(为了与最新版本的 Azure SDK IOT 设备客户端兼容),我开始出现错误,因为 com.google.common.EventBus 不再存在。添加依赖:

<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>15.0</version>
</dependency>

修复了这个问题,它能够在 IntelliJ 中本地运行。但是,当我部署编译到 Raspberry Pi 的 .deb 文件时,它开始产生错误:

java.lang.NoClassDefFoundError: javax/inject/Provider at com.google.inject.internal.MoreTypes.canonicalizeForKey(MoreTypes.jav a:81) at com.google.inject.Key.(Key.java:119) at com.google.inject.Key.get(Key.java:212) at com.google.inject.spi.Elements$RecordingBinder.bind(Elements.java:262 ) at com.google.inject.internal.InjectorShell$RootModule.configure(InjectorShell.java:276) 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.infusion.empm.Main.main(Main.java:32) Caused by: java.lang.ClassNotFoundException: javax.inject.Provider at 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 jar(生成的另一个 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 提供程序。将本地代码中的每个“com.google.inject”导入替换为“java.inject”会导致完全相同的行为,因此它必须是引用 google 代码的依赖项,而后者又无法找到 javax。

最佳答案

原来是 Pi 上的一个脚本对类路径中的 jars 进行了硬编码。

关于java - "NoClassDefFoundError: javax/inject/Provider"即使包含 javax.inject 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253576/

相关文章:

java - JComboBox 为一个字符串 ArrayList 添加项目,但为另一个字符串从 GUI 中消失

dependency-injection - 帮助在内部获得 DI/IoC

java - 谷歌指南 2.0

c# - 如何在 WPF 应用程序中结合使用 MVVM 和依赖注入(inject)?

unit-testing - RAD:依赖注入(inject) - 好处?

java - 在java库中使用依赖注入(inject)好不好?

java - 在 Guice 中避免框架强加的循环依赖

java - 如何使用java代码在eclipse的控制台中插入值

java - 我可以使用 HtmlUnit 来监听资源加载事件吗?

JavaFX8 - sun.util.logging.PlatformLogger 在 NetBeans 8 中找不到异常