Spring - 从类路径资源 [Beans.xml]-NoClassDefFoundError 加载 XML bean 定义

Posted

技术标签:

【中文标题】Spring - 从类路径资源 [Beans.xml]-NoClassDefFoundError 加载 XML bean 定义【英文标题】:Spring - Loading XML bean definitions from class path resource [Beans.xml]- NoClassDefFoundError 【发布时间】:2015-08-07 13:48:02 【问题描述】:

我是 Spring 的新手,我的第一个 Spring 项目指的是 this tutorial。按照所有说明操作后,我尝试运行该程序,但出现此错误。

May 26, 2015 11:42:45 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@31221be2: startup date [Tue May 26 11:42:45 CST 2015]; root of context hierarchy
May 26, 2015 11:42:45 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [Beans.xml]
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext
    at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:553)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:455)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.tutorialspoint.MainApp.main(MainApp.java:9)
Caused by: java.lang.ClassNotFoundException: org.springframework.expression.ParserContext
    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)
    ... 5 more

知道我在哪里做错了。据我所知,我正确地遵循了教程。

代码

package com.tutorialspoint;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp 
   public static void main(String[] args) 
      ApplicationContext context = 
             new ClassPathXmlApplicationContext("Beans.xml");

      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

      obj.getMessage();
   

Beans.XML

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

【问题讨论】:

显示您的Beans.xml。这就是所有的代码吗?也发布完整的堆栈跟踪。 @Dishalan2014 你添加了所有需要的罐子吗 @TSurendra 你是对的。我错过了一罐。它工作正常。谢谢 【参考方案1】:

检查您是否在类路径中添加了所有必需的 jar。

org.springframework.expression.ParserContext 类位于 spring-expresssion-YOUR_SPRING_VERSION.jar 中检查您是否在类路径中添加了此 jar。

【讨论】:

【参考方案2】:

我遇到了同样的问题。但是我发现了我的错误。

我的错误是,我在 com.tutorialspont 包中创建了 "Beans.xml"

我的解决方案是 "Beans.xml" 必须直接在 src 文件夹下创建。

【讨论】:

【参考方案3】:

log4j:WARN 找不到记录器的附加程序(org.springframework.core.env.StandardEnvironment)。 log4j:WARN 请正确初始化 log4j 系统。 线程“main”中的异常 java.lang.NoClassDefFoundError: org/springframework/expression/PropertyAccessor 在 org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:553) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454) 在 org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) 在 org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) 在 com.javahonk.client.TestWebService.main(TestWebService.java:19) 引起:java.lang.ClassNotFoundException:org.springframework.expression.PropertyAccessor 在 java.net.URLClassLoader$1.run(URLClassLoader.java:372) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:361) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:360) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 5 更多

上述问题的解决方法:如果你的类路径中没有 spring-expression-xxx.Release.jar ,就会出现这种情况。请在您的类路径中添加 spring-expression-3.2.3.RELEASE 或最新版本的 jar 以解决此问题。

【讨论】:

以上是关于Spring - 从类路径资源 [Beans.xml]-NoClassDefFoundError 加载 XML bean 定义的主要内容,如果未能解决你的问题,请参考以下文章

从类路径目录中获取资源列表

OSGi 包从类路径错误中获取资源

从类路径加载资源

Spring之ResourceLoader

Spring Boot 从类路径加载 H2 db 文件

从类路径资源(XML 文件)获取输入流