需要了解spring.handlers和spring.schemas

时间:2011-12-22 20:23:43

标签: spring xsd uri spring-batch spring-3

我有一些问题来自我已经通过this other question解决的问题。但是,我仍然想知道根本原因。我的问题如下:

  1. spring.handlers spring.schemas 的目的是什么?
  2. 据我所知,这是一种告诉Spring Framework在哪里找到xsd以便所有内容都正确连接和加载的方法。但...

    1. 我应该在什么情况下将这两个文件放在 META-INF 文件夹下?

    2. 在我上面提到的另一个问题中,是否有人知道为什么我必须在META-INF下添加maven-shade-plugin来创建这两个文件(基于我的所有依赖项)?换句话说,导致我必须使用maven shade插件的根本原因是什么?

1 个答案:

答案 0 :(得分:26)

  

spring.handlers和spring.schemas的目的是什么?

你或多或少地发现了它,让我们添加更多细节:

某些spring库在META-INF目录中包含spring.schemas and a spring.handlers file

<强> META-INF / spring.schemas

  • 将schemalocation重新映射到库中的xsd
  • (摘要)此库仅支持重新映射的版本

<强> META-INF / spring.handlers

  • 为特定名称空间提供名称空间处理程序类
  • 命名空间处理程序类提供解析器逻辑来解析spring-batch bean,例如 job 步骤

(*)在构建spring应用程序上下文期间发生了实际的重新映射


  

在什么情况下我应该将这两个文件放在   META-INF文件夹?

通常文件在你使用的spring库jar中,但是你可以使用这种机制来实现自己的命名空间bean解析,然后你就拥有自己的文件


  

在我上面提到的另一个问题中,是否有人知道我必须添加的原因   maven-shade-plugin创建这两个文件(基于我的所有文件)   META-INF下的依赖项?换句话说,什么是ROOT原因   这让我不得不使用maven shade插件?

如果在spring配置中使用spring命名空间,则需要相应的文件

当您想要运行java应用程序时出现问题:

  • 还有一个主要课程
    • spring库需要在classpath
    • 或全部合并到一个jar中,该jar必须位于类路径(*)
  • 作为war / ear服务器应用程序,弹簧库需要在类路径上,通常在战争中

我猜你没有用完整的类路径启动主类,我也为你的第一个问题更新了answer

(*)如果将all合并到一个jar中,则必须确保所有spring.schemas / spring.handlers文件的内容合并为一个spring.schemas和一个spring.handlers文件,请参阅此{ {3}}