开发者社区> 问答> 正文

关于fatjar把多个jar打包成一个的问题? 400 报错

关于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后一个覆盖了前一个。有没有办法解决啊?

展开
收起
爱吃鱼的程序员 2020-06-02 13:21:16 507 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

        普通的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是不需要也没有的)
    2020-06-02 13:21:33
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载