Eclipse 上的 Java 构建路径错误

标签 java eclipse noclassdeffounderror classnotfoundexception

最近,我一直在研究 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 .

See Google Guice Wiki

JSR 330

Guice 4.0需要类路径上有 JSR 330。这是 guice 下载中包含的 javax.inject.jarcom.google.inject.internal

com.google.inject.internal 中的许多内容已更改和/或移动。对于重新打包的 Guava(以前的 Google Collections)、cglib 和 asm 类尤其如此。所有这些类现在都隐藏在 IDE 自动导入建议中,并且位于新位置。如果您依赖这些类中的任何一个,您将必须更新您的代码。

关于Eclipse 上的 Java 构建路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23373594/

相关文章:

Java 8 HashMap KeySet() 输出不同于 Java 7

java - 使用eclipse进行处理,无法让java应用程序运行

java - NoClassDefFoundError 但 jar 路径正确

java - 在 Android 应用程序中调用静态方法时出现致命异常 : java. lang.NoClassDefFoundError

android - Eclipse:Android 项目中 JDK 类的 java.lang.NoClassDefFoundError

java - 使用struts时jdbc mysql数据源连接错误

java - HashMap vs ArrayList 性能我是正确的

java - 最后一位数字补零

java - 我可以在 eclipse 中定义一个显示 html 文件的 View 吗?

android - 在cygwin中使用NDK构建项目