Java jar和源中的命名注释失败

Java jar和源中的命名注释失败,java,dependency-injection,annotations,guice,Java,Dependency Injection,Annotations,Guice,openkad项目有问题,但可能是GUI/环境问题: gist是代码使用GUI来: @Provides @Singleton @Named("openkad.rnd") Random provideRandom(@Named("openkad.seed") final long seed) { return seed == 0 ? new Random() : new Random(seed); } 然而,@Singleton和@Named(“openkad.rnd”

openkad项目有问题,但可能是GUI/环境问题:

gist是代码使用GUI来:

@Provides
@Singleton
@Named("openkad.rnd") 
Random provideRandom(@Named("openkad.seed") final long seed) {
        return seed == 0 ? new Random() : new Random(seed);
    }
然而,@Singleton和@Named(“openkad.rnd”)都被编译器标记为不正确的位置

显然是正确的,因为命名注释的目标是字段,而不是方法:

/**
 * Annotates named things.
 *
 * @author crazybob@google.com (Bob Lee)
 */
@Retention(RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@BindingAnnotation
public @interface Named {
  String value();
}
要重新创建:

  • 在eclipse中使用JDK1.6或1.8针对各种运行时创建Java项目
  • 通过pom包含依赖项(guice 1到4)
  • 使用源代码或openkad r60 jar文件运行单元测试()
  • 预期产量是多少?你看到了什么

    所有UT的成功,但我看到的是:

    com.google.inject.CreationException: Guice configuration errors:
    
    1) Error at il.technion.ewolf.kbr.openkad.BootstrapNodesSaver.<init>(BootstrapNodesSaver.java:26):
     Binding to java.io.File annotated with @com.google.inject.name.Named(value=openkad.file.nodes) not found. No bindings to that type were found.
    
    2) Error at il.technion.ewolf.kbr.openkad.IncomingContentHandler.<init>(IncomingContentHandler.java:43):
     Binding to java.util.concurrent.ExecutorService annotated with @com.google.inject.name.Named(value=openkad.executors.client) not found. No bindings to that type were found.
    
    3) Error at il.technion.ewolf.kbr.openkad.KadNet.<init>(KadNet.java:75):
     Binding to il.technion.ewolf.kbr.Node annotated with @com.google.inject.name.Named(value=openkad.local.node) not found. No bindings to that type were found.
    
    4) Error at il.technion.ewolf.kbr.openkad.bucket.KadBuckets.<init>(KadBuckets.java:58):
     Binding to il.technion.ewolf.kbr.KeyFactory not found. No bindings to that type were found.
    
    5) Error at il.technion.ewolf.kbr.openkad.handlers.ForwardHandler.<init>(ForwardHandler.java:96):
     Binding to il.technion.ewolf.kbr.Node annotated with @com.google.inject.name.Named(value=openkad.local.node) not found. No bindings to that type were found.
    
    6) Error at il.technion.ewolf.kbr.openkad.handlers.KademliaFindNodeHandler.<init>(KademliaFindNodeHandler.java:50):
     Binding to il.technion.ewolf.kbr.Node annotated with @com.google.inject.name.Named(value=openkad.local.node) not found. No bindings to that type were found.
    
    7) Error at il.technion.ewolf.kbr.openkad.handlers.PingHandler.<init>(PingHandler.java:38):
     Binding to il.technion.ewolf.kbr.Node annotated with @com.google.inject.name.Named(value=openkad.local.node) not found. No bindings to that type were found.
    
    8) Error at il.technion.ewolf.kbr.openkad.msg.ContentMessage.<init>(ContentMessage.java:26):
     Binding to long annotated with @com.google.inject.name.Named(value=openkad.rnd.id) not found. No bindings to that type were found.
    
    9) Error at il.technion.ewolf.kbr.openkad.msg.ContentRequest.<init>(ContentRequest.java:27):
     Binding to long annotated with @com.google.inject.name.Named(value=openkad.rnd.id) not found. No bindings to that type were found.
    
    10) Error at il.technion.ewolf.kbr.openkad.msg.FindNodeRequest.<init>(FindNodeRequest.java:25):
     Binding to long annotated with @com.google.inject.name.Named(value=openkad.rnd.id) not found. No bindings to that type were found.
    
    11) Error at il.technion.ewolf.kbr.openkad.msg.ForwardRequest.<init>(ForwardRequest.java:30):
     Binding to long annotated with @com.google.inject.name.Named(value=openkad.rnd.id) not found. No bindings to that type were found.
    
    12) Error at il.technion.ewolf.kbr.openkad.msg.PingRequest.<init>(PingRequest.java:22):
     Binding to long annotated with @com.google.inject.name.Named(value=openkad.rnd.id) not found. No bindings to that type were found.
    
    13) Error at il.technion.ewolf.kbr.openkad.net.KadServer.<init>(KadServer.java:59):
     Binding to com.google.inject.Provider<java.net.DatagramSocket> annotated with @com.google.inject.name.Named(value=openkad.net.udp.sock) not found. No bindings to that type were found.
    
    14) Error at il.technion.ewolf.kbr.openkad.net.KadServer.<init>(KadServer.java:59):
     Binding to java.util.concurrent.BlockingQueue<java.net.DatagramPacket> annotated with @com.google.inject.name.Named(value=openkad.net.buffer) not found. No bindings to that type were found.
    
    15) Error at il.technion.ewolf.kbr.openkad.net.MessageDispatcher.<init>(MessageDispatcher.java:56):
     Binding to java.util.concurrent.BlockingQueue<il.technion.ewolf.kbr.openkad.net.MessageDispatcher<?>> annotated with @com.google.inject.name.Named(value=openkad.net.req_queue) not found. No bindings to that type were found.
    
    16) Error at il.technion.ewolf.kbr.openkad.op.EagerColorFindValueOperation.<init>(EagerColorFindValueOperation.java:73):
     Binding to il.technion.ewolf.kbr.Node annotated with @com.google.inject.name.Named(value=openkad.local.node) not found. No bindings to that type were found.
    
    17) Error at il.technion.ewolf.kbr.openkad.op.JoinOperation.<init>(JoinOperation.java:48):
     Binding to il.technion.ewolf.kbr.Key annotated with @com.google.inject.name.Named(value=openkad.keys.zerokey) not found. No bindings to that type were found.
    
    18) Error at il.technion.ewolf.kbr.openkad.op.KadFindNodeOperation.<init>(KadFindNodeOperation.java:49):
     Binding to il.technion.ewolf.kbr.Node annotated with @com.google.inject.name.Named(value=openkad.local.node) not found. No bindings to that type were found.
    
    19) Error at il.technion.ewolf.kbr.openkad.op.KadLocalCacheFindValueOperation.<init>(KadLocalCacheFindValueOperation.java:65):
     Binding to il.technion.ewolf.kbr.Node annotated with @com.google.inject.name.Named(value=openkad.local.node) not found. No bindings to that type were found.
    
    19 error[s]
        at com.google.inject.BinderImpl.createInjector(BinderImpl.java:277)
        at com.google.inject.Guice.createInjector(Guice.java:79)
        at com.google.inject.Guice.createInjector(Guice.java:53)
        at com.google.inject.Guice.createInjector(Guice.java:43)
        at il.technion.ewolf.kbr.KeybasedRoutingTest.the2NodesShouldAbleToSendArbitrarySerializableMessages(KeybasedRoutingTest.java:314)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.internal.runners.statements.FailOnTimeout$StatementThread.run(FailOnTimeout.java:74)
    
    com.google.inject.CreationException:Guice配置错误:
    1) il.technion.ewolf.kbr.openkad.BootstrapNodesSaver处出错。(BootstrapNodesSaver.java:26):
    找不到用@com.google.inject.name.Named(value=openkad.File.nodes)注释的java.io.File的绑定。找不到与该类型的绑定。
    2) il.technion.ewolf.kbr.openkad.IncomingContentHandler处出错。(IncomingContentHandler.java:43):
    找不到用@com.google.inject.name.Named(value=openkad.executors.client)注释的java.util.concurrent.ExecutorService的绑定。找不到与该类型的绑定。
    3) il.technion.ewolf.kbr.openkad.KadNet(KadNet.java:75)处出错:
    找不到用@com.google.inject.name.Named(value=openkad.local.Node)注释的il.technion.ewolf.kbr.Node的绑定。找不到与该类型的绑定。
    4) il.technion.ewolf.kbr.openkad.bucket.KadBuckets处出错。(KadBuckets.java:58):
    找不到与il.technion.ewolf.kbr.KeyFactory的绑定。找不到与该类型的绑定。
    5) il.technion.ewolf.kbr.openkad.handlers.ForwardHandler处出错。(ForwardHandler.java:96):
    找不到用@com.google.inject.name.Named(value=openkad.local.Node)注释的il.technion.ewolf.kbr.Node的绑定。找不到与该类型的绑定。
    6) il.technion.ewolf.kbr.openkad.handlers.KademliaFindNodeHandler处出错。(kademliafindenodehandler.java:50):
    找不到用@com.google.inject.name.Named(value=openkad.local.Node)注释的il.technion.ewolf.kbr.Node的绑定。找不到与该类型的绑定。
    7) il.technion.ewolf.kbr.openkad.handlers.PingHandler处出错。(PingHandler.java:38):
    找不到用@com.google.inject.name.Named(value=openkad.local.Node)注释的il.technion.ewolf.kbr.Node的绑定。找不到与该类型的绑定。
    8) il.technion.ewolf.kbr.openkad.msg.ContentMessage处出错。(ContentMessage.java:26):
    找不到使用@com.google.inject.name.Named(value=openkad.rnd.id)进行长注释的绑定。找不到与该类型的绑定。
    9) il.technion.ewolf.kbr.openkad.msg.ContentRequest处出错。(ContentRequest.java:27):
    找不到使用@com.google.inject.name.Named(value=openkad.rnd.id)进行长注释的绑定。找不到与该类型的绑定。
    10) il.technion.ewolf.kbr.openkad.msg.FindNodeRequest处出错。(FindNodeRequest.java:25):
    找不到使用@com.google.inject.name.Named(value=openkad.rnd.id)进行长注释的绑定。找不到与该类型的绑定。
    11) il.technion.ewolf.kbr.openkad.msg.ForwardRequest处出错。(ForwardRequest.java:30):
    找不到使用@com.google.inject.name.Named(value=openkad.rnd.id)进行长注释的绑定。找不到与该类型的绑定。
    12) il.technion.ewolf.kbr.openkad.msg.PingRequest处出错。(PingRequest.java:22):
    找不到使用@com.google.inject.name.Named(value=openkad.rnd.id)进行长注释的绑定。找不到与该类型的绑定。
    13) il.technion.ewolf.kbr.openkad.net.KadServer处出错。(KadServer.java:59):
    找不到用@com.google.inject.name.Named(value=openkad.net.udp.sock)注释的com.google.inject.Provider的绑定。找不到与该类型的绑定。
    14) il.technion.ewolf.kbr.openkad.net.KadServer处出错。(KadServer.java:59):
    找不到用@com.google.inject.name.Named(value=openkad.net.buffer)注释的java.util.concurrent.BlockingQueue的绑定。找不到与该类型的绑定。
    15) il.technion.ewolf.kbr.openkad.net.MessageDispatcher处出错。(MessageDispatcher.java:56):
    
    绑定到java.util.concurrent.BlockingQueueTavian Barnes的建议奏效了。

    Guice 3。请尝试
    mvn dependency:tree-Dverbose
    查看是否使用了冲突的Guice版本。就是这样,谢谢您让我查看!请记住标记此问题已解决。谢谢