Unable to locate Spring NamespaceHandler for XML schema namespace

  1. Maven 项目用maven-assembly-plugin打jar包,配置如下:  
  2.     
  3.                 maven-assembly-plugin    
  4.                     
  5.                         
  6.                         jar-with-dependencies    
  7.                         
  8.                         
  9.                             
  10.                                 
  11.                             
  12.                         
  13.                     
  14.                     
  15.                         
  16.                         make-assembly    
  17.                         package    
  18.                             
  19.                             single    
  20.                             
  21.                         
  22.                     
  23.                 
  24.   
  25. 执行时报错,因为需要加载spring的配置,简单来说就是 spring 在启动时会加载 xsd 文件,它首先会到本地查找 xsd 文件(一般都会包含在 spring 的 jar 包中),如果找不到则会到 xml 头部定义的 url 指定路径下中去寻找 xsd,如果找不到则会报错。那为什么还是找不到呢?  
  26.  原来这是 assembly 插件的一个 bug,具体情况参见:http://jira.codehaus.org/browse/MASSEMBLY-360  
  27. 该 bug 产生的原因如下:工程一般依赖了很多的 jar 包,而被依赖的 jar 又会依赖其他的 jar 包,这样,当工程中依赖到不同的版本的 spring 时,在使用 assembly 进行打包时,只能将某一个版本 jar 包下的 spring.schemas 文件放入最终打出的jar包里,这就有可能遗漏了一些版本的 xsd 的本地映射,所以会报错。  
  28. 所以一般推荐使用另外的一个插件来进行打包,插件名称为:maven-shade-plugin,shade 插件打包时在对 spring.schemas 文件处理上,它能够将所有 jar 里的 spring.schemas 文件进行合并,在最终生成的单一 jar 包里,spring.schemas 包含了所有出现过的版本的集合,要使用 shade 插件,必须在 pom 进行如下配置:  
  29.     
  30.     org.apache.maven.plugins    
  31.     maven-shade-plugin    
  32.     1.4    
  33.         
  34.             
  35.             package    
  36.                 
  37.                 shade    
  38.                 
  39.                 
  40.                     
  41.                     
  42.                         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">    
  43.                         META-INF/spring.handlers    
  44.                        
  45.                     
  46.                         implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">    
  47.                         com.chinamobile.cmss.face.util.BatchAddFaceMain    
  48.                         
  49.                     
  50.                         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">    
  51.                         META-INF/spring.schemas    
  52.                         
  53.                     
  54.                 
  55.             
  56.         
  57.    
  58. 经测试验证,的确可以运行了。

你可能感兴趣的:(开发经验,解决方案)