【问题标题】:Spring "hello world" example error: A JNI error has occured & NoClassDefFoundError: org/springframework/beans/factory/ListableBeanFactorySpring“hello world”示例错误:发生 JNI 错误 & NoClassDefFoundError: org/springframework/beans/factory/ListableBeanFactory
【发布时间】:2017-05-01 19:45:44
【问题描述】:

我尝试使用 Eclipse 在以下位置运行 Spring Framework“快速入门”教程 http://projects.spring.io/spring-framework/

我首先在 Eclipse 中构建了一个 Maven 项目,并添加了三个 .java 文件。 代码如下

package hello;

public interface MessageService {
    String getMessage();
}

package hello;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessagePrinter {

    final private MessageService service;

    @Autowired
    public MessagePrinter(MessageService service){
        this.service = service;
    }

    public void printMessage(){
        System.out.println(this.service.getMessage());
    }

}

package hello;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;

@Configuration
@ComponentScan
public class Application {

    @Bean
    MessageService mockMessageService(){
        return new MessageService(){
            public String getMessage() {
                return "Hello World!";
            }};
    }

    public static void main(String args[]){
        ApplicationContext context = 
                new AnnotationConfigApplicationContext(Application.class);
        MessagePrinter printer = context.getBean(MessagePrinter.class);
        printer.printMessage();
    }

}

然后我右键单击 Eclipse 并选择“运行为 > Java 应用程序”。跳出两条错误信息:

  1. 错误:发生 JNI 错误,请检查您的安装并重试

  2. 发生了 Java 异常。

控制台显示

线程“main”中的异常 java.lang.NoClassDefFoundError: org/springframework/beans/factory/ListableBeanFactory 在 java.lang.ClassLoader.defineClass1(本机方法) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:763) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:73) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:368) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:362) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:361) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 java.lang.Class.getDeclaredMethods0(本机方法) 在 java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 在 java.lang.Class.privateGetMethodRecursive(Class.java:3048) 在 java.lang.Class.getMethod0(Class.java:3018) 在 java.lang.Class.getMethod(Class.java:1784) 在 sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 在 sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 引起:java.lang.ClassNotFoundException:org.springframework.beans.factory.ListableBeanFactory 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 19 更多

我试图在 POM 文件中添加更多的 Spring 依赖项(包括 aop aspect beans context context-support core ...),但这没有用。

【问题讨论】:

  • 尝试将spring-beans 依赖添加到您的pom
  • 我尝试在 POM 文件中添加 Spring 依赖项(包括 aop aspect beans context context-support core ...),但没有成功。
  • 由于您使用 Eclipse 运行应用程序,因此您需要将相应的 jar 文件添加到项目构建路径中。右键项目->构建路径->配置构建路径->库->添加外部Jar

标签: java eclipse spring


【解决方案1】:

我已经解决了这个问题。事实上,这个问题与“发生 JNI 错误”关系不大。

这个问题的原因是Eclipse下载Maven依赖jar文件时出错,即“spring-beans”。

所以我(手动)删除了“....m2\repository\org\springframework\spring-beans”中的所有文件,并使用 Eclipse 重建项目。这样问题就解决了。

【讨论】:

  • 其实这个例子“hello world”程序不需要在POM文件中添加spring-beans等依赖。只需要“spring-context”
猜你喜欢
  • 1970-01-01
  • 2019-01-07
  • 2013-04-02
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多