zoukankan      html  css  js  c++  java
  • Spring5.2.X源代码编译-问题-Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]

      进行注解的测试,添加注解,并在config.xml配置了包扫描的内容:

        <context:component-scan base-package="org.example.*"/>

      运行代码后报错:

    Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
    Offending resource: class path resource [config.xml]
    
        at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:72)
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:119)
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:111)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:281)
    ...

      后查询出是因为依赖的是Module,找到Spring-context.main中的编译文件中,META-INF下没有spring.handlers文件。于是修改了该子工程的spring-context.gradle文件:

      

      在原先内容的基础上添加了新的打包语句,作用是JAR包需要包含META-INF下的内容:

    jar {
        from('./src/main/java') {
            include 'META-INF/*'
        }
    }

      打包后,可以解压该JAR包,发现其中有我们需要的配置文件。此时SpringFrameworkDemo的Project Structure需要修改依赖。

      找到对应的工程结构,点击+并选择第一个:

      

       找到刚才打出的JAR包,并添加进去:

      

       取消对原先Module的依赖,并重新依赖新的JAR包:

      

       Apply-OK。

      再次运行代码,该问题解决,跟踪代码,会发现此时进入到已打好的JAR包中。

      如果有调试的需求,还是想进入到之前的依赖Module,修改源代码或者注释的内容模式时,可以将JAR包解压,找到META-INF目录下所有的文件,拷贝到spring-contextuildclassesjavamainMETA-INF目录下,然后再次添加对spring-context.main的Module依赖,并去除对之前的JAR包依赖即可。既可以进行源代码的修改,也解决了上文提到的问题。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      后记:目前没有找到合适的方法,最便捷的应该是用Gradle直接在build时就把相关的META-INF文件生成到spring-contextuildclassesjavamainMETA-INF目录中,后续找到会再次记录。

  • 相关阅读:
    路由器设置无线网的方法
    numpy, pandas, matplotlib等常用库的学习手册
    文本乱码的解决办法
    漫画:SOA中怎样确定服务的粒度?
    漫画:大公司都在重复造轮子吗?
    演讲稿:新人培养之道
    漫画:全面理解java.lang.IllegalArgumentException及其可用性设计
    漫画:性能、可用性和锁
    漫画:Linux中/etc/resolv.conf文件和puppet工具解析
    《两地书》--Kubernetes(K8s)基础知识(docker容器技术)
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/14233565.html
Copyright © 2011-2022 走看看