openkad项目有问题,但可能是向导/环境问题:
要点是代码使用Guice来:
@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 [email protected] (Bob Lee)
*/
@Retention(RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@BindingAnnotation
public @interface Named {
String value();
}
重新创建:
使用针对各种运行时的JDK 1.6或1.8在eclipse中创建Java项目
通过pom包含依赖项(尝试了第1至第4种方法)
使用源或openkad r60 jar文件运行单元测试(https://code.google.com/p/openkad/)
什么是预期的输出?你看到了什么呢?
所有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)
谢谢
最佳答案
塔维安·巴恩斯(Tavian Barnes)的建议奏效了。