我有一些问题是从我已经通过this other question解决的问题中衍生出来的。但是,我仍然在想根本原因。我的问题如下:
spring.handlers和spring.schemas的目的是什么?
据我所知,这是一种告诉Spring框架在哪里定位XSD的方法,以便正确地连接和加载所有内容。但是…
在什么情况下,我应该把这两个文件放在META-INF文件夹下?
在上面链接的另一个问题中,是否有人知道为什么我必须添加maven-shade-plugin来在META-INF下创建这两个文件(基于所有依赖项)?换句话说,我必须使用maven shade插件的根本原因是什么?

最佳答案

spring.handlers和spring.schemas的目的是什么?
嗯,你或多或少是自己发现的,让我们添加一些细节:
一些Spring库在META-INF目录中包含一个spring.schemas and a spring.handlers file
META-INF/Spring.schemas
将(*)架构位置重新映射到库中的XSD
(摘要)此库仅支持重新映射的版本
META-INF/Spring.Handlers
为特定命名空间提供命名空间处理程序类
命名空间处理程序类提供了解析Spring批处理bean的分析器逻辑,如job,
步骤等。
(*)实际的重新映射发生在Spring应用程序上下文的构建过程中。
在什么情况下我应该把这两个文件放在
META-INF文件夹?
通常,文件在您使用的Spring库jar中,但是您可以使用这个机制来实现自己的名称空间bean解析,然后您将拥有自己的文件。
在我上面提到的另一个问题中,有人知道我为什么要补充
创建这两个文件的maven shade插件(基于
依赖项)在META-INF下?换句话说,根本原因是什么
这让我不得不使用maven shade插件?
如果在Spring配置中使用Spring命名空间,则需要适当的文件
当您想运行Java应用程序时,问题就出现了:
也有一个主类
Spring库需要在类路径上
或者全部合并到一个jar中,该jar必须位于类路径(*)
作为war/ear服务器应用程序,Spring libaries需要位于类路径上,通常位于战争内部。
我猜你没有用完整的类路径来启动主类,我也为你的第一个问题更新了我的answer
(*)如果将所有内容合并到一个jar中,则必须确保所有spring.schemas/spring.handlers文件的内容合并到一个spring.schemas和一个spring.handlers文件中,请参见answer for a configuration with maven to create an all-in-one.jar

09-10 08:21
查看更多