最近,我一直在研究 Java 中的依赖注入(inject)。我是这个领域的新手,我真的不明白为什么在这个简单的例子中我不断收到错误。
package michal.dependency;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Injector injector = Guice.createInjector(new ProjectModule());
Person person = injector.getInstance(Person.class);
person.greetFriend();
}
}
我收到的错误消息如下:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableList
at com.google.inject.internal.Errors.<clinit>(Errors.java:656)
at com.google.inject.internal.InternalInjectorCreator.<init>(InternalInjectorCreator.java:62)
at com.google.inject.Guice.createInjector(Guice.java:96)
at com.google.inject.Guice.createInjector(Guice.java:73)
at com.google.inject.Guice.createInjector(Guice.java:62)
at michal.dependency.Main.main(Main.java:14)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.ImmutableList
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 6 more
我很确定必要的 .jar 文件包含在类路径中。
这是所请求的 Person 类,按要求:
package michal.dependency;
import com.google.inject.Inject;
public class Person {
private MessageService messageService;
@Inject
public Person (MessageService messageService)
{
this.messageService = messageService;
}
public void greetFriend ()
{
messageService.sendMessage("Hey!", "How are you?");
}
}
提前致谢。
最佳答案
我认为你失踪了Google collections ,现称为Guava .
JSR 330
Guice 4.0需要类路径上有 JSR 330。这是 guice 下载中包含的 javax.inject.jar
。
com.google.inject.internal
com.google.inject.internal
中的许多内容已更改和/或移动。对于重新打包的 Guava(以前的 Google Collections)、cglib 和 asm 类尤其如此。所有这些类现在都隐藏在 IDE 自动导入建议中,并且位于新位置。如果您依赖这些类中的任何一个,您将必须更新您的代码。
关于Eclipse 上的 Java 构建路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23373594/