为什么Guice抛出NoSuchMethodError?

3
这是Google Guice的调用代码:
public static ContainerRunner forInjector(Injector injector) {
    return (ContainerRunner)injector.getInstancefaultContainerRunner.class);
}

public static ContainerRunner forModules(Iterable<? extends Module> modules) {
    return forInjector(Guice.createInjector(modules));
}

这是一个例外:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.inject.internal.Initializer.requestInjection(Lcom/google/inject/internal/InjectorImpl;Ljava/lang/Object;Lcom/google/inject/Binding;Ljava/lang/Object;Ljava/util/Set;)Lcom/google/inject/internal/Initializable;
at com.google.inject.internal.BindingProcessor$1.visit(BindingProcessor.java:108)
at com.google.inject.internal.BindingProcessor$1.visit(BindingProcessor.java:70)
at com.google.inject.internal.ProviderInstanceBindingImpl.acceptTargetVisitor(ProviderInstanceBindingImpl.java:62)
at com.google.inject.internal.BindingProcessor.visit(BindingProcessor.java:70)
at com.google.inject.internal.BindingProcessor.visit(BindingProcessor.java:43)
at com.google.inject.internal.BindingImpl.acceptVisitor(BindingImpl.java:93)
at com.google.inject.internal.AbstractProcessor.process(AbstractProcessor.java:56)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:186)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
at com.google.inject.Guice.createInjector(Guice.java:96)
at com.google.inject.Guice.createInjector(Guice.java:73)
at com.baml.gmt.xasf.container.ContainerRunners.forModules(ContainerRunners.java:39)

我的问题是,该消息没有告诉我哪个具体的方法缺失。有没有好的调试方法?这可能是一个Maven传递依赖的问题吗?

2个回答

0
原来,在Unix环境下执行时,lib目录中的文件存在权限问题。一旦我更改了权限,就能解决这个Guice错误。根据我的经验,这个Guice错误几乎总是由于依赖问题引起的。但是Guice并没有提供更具体、更详细的错误信息。

0

谢谢您,@durron597,信息不一致。我被告知这可能是由于通过传递依赖项拉取多个Guice版本引起的。令我困扰的是,这个错误信息没有提示从哪里开始。或者可能是因为存在多个JAR文件的不同版本。 - joehuangathome
我在两个地方运行了相同的主方法:IntelliJ和Unix,在lib目录中,我倾倒了所有由mvn dependency:copy-dependencies生成的依赖文件和pub lib作为Java类路径。在IntelliJ中,它可以正常运行。在Unix中,它抛出了这个错误堆栈跟踪。 - joehuangathome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接