当前位置: 首页 > 知识库问答 >
问题:

为什么Guice要抛出一个nosuchmethoderror?

濮阳旺
2023-03-14

这是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传递依赖问题吗?

共有1个答案

太叔京
2023-03-14

结果发现,当我在Unix环境下执行时,lib目录中的文件存在权限问题。我一更改权限,它就通过了这个Guice错误。从我的粘贴经验来看,这个Guice错误几乎总是由于依赖关系问题造成的。但Guice没有给出更具体、更具有描述性的错误消息。

 类似资料:
  • 下面是我的代码: 现在我的脑海中应该不会出现不匹配,因为显然提取了两个整数?!

  • 我试图将两个“Employee”对象添加到树集中: 但它引发了一个ClassCastException: 但是如果我只向TreeSet添加一个对象: 或者如果我使用哈希集: 那么它就是成功的。为什么会发生异常,如何修复它?

  • 问题内容: 我在编写Traveling Salesman程序时遇到了这个问题。对于内部循环,我尝试了 但是在该列表中添加另一个点时会导致被抛出。 但是,当我将循环更改为 循环运行良好,没有引发异常。 这两个都是for循环,那么为什么一个抛出异常却另一个没有抛出异常呢? 问题答案: 正如其他人解释的那样,迭代器检测到对基础集合的修改,这是一件好事,因为它可能会导致意外的行为。 想象一下下面的无迭代器

  • 问题内容: final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause

  • 问题内容: 我试图将两个’Employee’对象添加到TreeSet中: 但是它抛出一个ClassCastException: 但是,如果我仅将一个对象添加到TreeSet中: 或者,如果我改用HashSet: 那就成功了。为什么会发生异常,我该如何解决? 问题答案: 要么必须实现,或者你需要提供一个比较创建时。 在文档中对此进行了详细说明: 插入排序集中的所有元素都必须实现接口(或被指定的比较器

  • 问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节: