问题:
bash org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 33; schema_reference.4: 无法读取方案文档 'https:www.springframework.orgschemacontextspring-context.xsd', 原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是 <xsd:schema>
最常见的导致这一问题的原因其实与使用了一个名为“assembly ”的 maven 打包插件有关。很多项目需要将工程连同其所依赖的所有 jar 包打包成一个 jar 包,maven 的 assembly 插件就是用来完成这个任务的。但是由于工程往往依赖很多的 jar 包,而被依赖的 jar 又会依赖其他的 jar 包,这样,当工程中依赖到不同的版本的 spring 时,在使用 assembly 进行打包时,只能将某一个版本 jar 包下的 spring.schemas 文件放入最终打出的 jar 包里,这就有可能遗漏了一些版本的 xsd 的本地映射,进而出现了文章开始提到的错误。如果你的项目是打成单一 jar 的,你可以通过检查最终生成的 jar 里的 spring.schemas 文件来确认是不是这种情况。而关于这种情况,解决的方法一般是推荐使用另外一种打包插件 shade。
回到我这次遇到的问题。因为我们使用的Spring系列依赖包:spring-beans、spring-context、spring-aop、spring-jdbc、spring-tx等其中有部分配置文件是同名的:spring.facotries、spring.handlers、spring.schemas、spring.tooling。
在进行打包的过程中,打包插件如果没有进行详细配置(我这里用的 maven-assembly-plugin
),这些同名的配置文件就会放在同一个目录下,同名的文件可能会被替换,最后就会形成配置文件不全的情况。
将所有的配置文件中的配置信息进行手动合并。然后将项目jar包目录\META-INF下的这4个文件用合并好的文件替换掉,就能运行了。