关于fatjar把多个jar打包成一个的问题? 400 报错
如下图,我想把这些jar打包成一个jar文件,我使用的工具是fatjar。里面有spring的jar包,当我集成的时候就出错Unable to locate Spring NamespaceHandler for XML schema namespace [http://ww” 。原因就是打包的时候,spring的jar包里META-INF里的spring.handlers和spring.schemas后一个覆盖了前一个。有没有办法解决啊?
普通的jar包是可以打在一起的,但是spring的不行,还有比如日志的也不行。因为它们的META-INF下面都有些xml配置文件,这些配置文件是为插件化提供的,也就是Service Provider Interface接口。
什么是SPI,可以参考此文:http://blog.csdn.net/fenglibing/article/details/7083071
你非要打在一起也可以,前提是你明白什么是SPI,怎么配置SPI。
######刚仔细看了遍你给的链接,原因不是在那里。在评论中字数有不超200限制,我就写评论了######谢谢######一直用gradle的插件build fatJar######嗯嗯,有时间就学学用gradle~######换个工具呗.######嗯嗯,正在学着用maven######最好不要把这些乱jar打在一起######是啊。但我们做的几个项目基本上都用到了这些,就集成spring的几个jar包出了问题~######最好别这么做######一个项目依赖哪些包,以及这些包之间的依赖关系,要心里有数,理清楚。否则,包越来越多的时候,很容易引起冲突,一旦引起冲突,再回过去找,你的脑袋就要炸了。######因为好几个项目都用到了,所以想打一起了!######刚看了你给的链接的作者给的示例代码,明白了些。那些jar给的接口,可以按照在META-INF/services下的文件名来创建这个class,java.util.ServiceLoader 会自己找到那些class。因为那些文件名不一样,所以合并jar包的时候是这些文件应该不会受到影响。spring合并出错,是因为spring.handlers,spring.schemas,spring.tooling这三个文件在每个spring的jar包中都可能有,所以会覆盖######是这样的,也就是这些jar包里还有额外的信息(普通的jar是不需要也没有的)版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。