【问题标题】:Spring XML schemasSpring XML 模式
【发布时间】:2012-08-05 14:01:21
【问题描述】:

我注意到一个关于 Spring XML 模式的奇怪问题。

我有一个使用 spring 框架的独立 java 应用程序。只要我在 Eclipse 中运行这个应用程序,我就不会遇到任何问题。但是,当我将其打包为 jar 文件(如 link 中所述)并执行该 jar 时,出现以下异常:

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/tx]
Offending resource: class path resource [applicationContext.xml]

        at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:316)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1416)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)

我在 applicationContext.xml 中有以下条目,它在 eclipse 中运行良好:

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

非常感谢任何帮助。

我什至尝试将http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 更改为classpath:/org/springframework/transaction/config/spring-tx-3.1.xsd,但没有帮助。

【问题讨论】:

标签: java spring jakarta-ee maven jar


【解决方案1】:

看起来您的应用程序包含一些 jar,例如 spring-core-3.1.x(因为正在使用它的类),但它缺少 spring-tx-3.1.x.RELEASE.jar (拥有 Spring Transaction 类的那个)。

【讨论】:

  • 当我将我的应用程序打包为 jar 时,所有的依赖 jar 都会被分解并打包到我的 jar 中。 (即)myapp.jar 包含所有 spring 依赖项作为包结构中的类文件。我验证并注意到 applicationContext.xml 中引用的 XSD 文件存在于正确的文件夹中。
  • 那么,您的 JAR 文件已“解压缩”并且所有内容都放在一起了吗?这是个坏主意。您会看到,许多 Spring JAR 包含一个名为 META-INF 的文件夹(您可以在 Eclipse 中检查它)。在这个文件夹中,有三个文件名为 spring.handlers、spring.schemas 和 spring.tooling。这些文件在每个 jar 上具有相同的名称,但包含不同的信息。因此,如果将所有内容放在一起,则每个 jar 都会覆盖这些内容。
  • 好吧,这似乎是有道理的。但是,当我创建我的 jar 时,它是解压缩依赖 jar 的 maven 程序集插件。我现在需要看看如何将依赖项保留为 jar,而不是被分解。
  • 感谢您的提示,带有“变压器配置”的 Maven 阴影插件应该可以解决问题。
猜你喜欢
  • 2016-01-30
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 2013-10-25
  • 2010-12-28
  • 2017-11-11
相关资源
最近更新 更多