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 定义的主要内容,如果未能解决你的问题,请参考以下文章