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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/30449191/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 09:38:41  来源:igfitidea点击:

Spring - Loading XML bean definitions from class path resource [Beans.xml]- NoClassDefFoundError

javaxmlspringspring-mvc

提问by Dishalan2014

I'm a newbie for Spring and I was referring to this tutorialfor my first Spring project. After follow all the instruction, I try to run the program but I'm having this error.

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

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.run(Unknown Source)
    at java.net.URLClassLoader.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

Any idea where I did the wrong. As I know I was following the tutorial correctly.

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

CODE

代码

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

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>

采纳答案by Pramod Karandikar

Check if you have added all the required jars in your classpath.

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

The class org.springframework.expression.ParserContextlies inside spring-expresssion-YOUR_SPRING_VERSION.jarCheck if you have this jar added on classpath.

该类org.springframework.expression.ParserContext位于内部spring-expresssion-YOUR_SPRING_VERSION.jar检查您是否在类路径上添加了这个 jar。

回答by padmender singh

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/expression/PropertyAccessor at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:553) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at com.javahonk.client.TestWebService.main(TestWebService.java:19) Caused by: java.lang.ClassNotFoundException: org.springframework.expression.PropertyAccessor at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 5 more

log4j:WARN 找不到记录器 (org.springframework.core.env.StandardEnvironment) 的附加程序。log4j:WARN 请正确初始化 log4j 系统。线程“main”中的异常java.lang.NoClassDefFoundError: org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory 处的 org/springframework/expression/PropertyAccessor(AbstractApplicationContext.java:553) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context .support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at com.javahonk.client.TestWebService.main(TestWebService.java:19) 由:java.lang.ClassNotFoundException: org.springframework.expression.PropertyAccessor at java.net。 URLClassLoader$1.run(URLClassLoader.java:372) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:361) 在 java.security.AccessController.doPrivileged(Native Method) 在 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 更多

Solution to the above problem:This happens if spring-expression-xxx.Release.jar in not available in your class path. Please add spring-expression-3.2.3.RELEASE or latest version jar in your class path to fix this issue.

上述问题的解决方案:如果 spring-expression-xxx.Release.jar 在您的类路径中不可用,就会发生这种情况。请在您的类路径中添加 spring-expression-3.2.3.RELEASE 或最新版本的 jar 以解决此问题。

回答by ARNAB PRADHAN

I was having the same issue. But I found my mistake.

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

My mistake was, I created "Beans.xml"inside com.tutorialspontpackage.

我的错误是,我在包内创建了“Beans.xml”com.tutorialspont

The solution for me was "Beans.xml"has to be created directly undersrcfolder.

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