热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mavenassemblyplugin打包spring项目UnabletolocateSpringNamespaceHandlerforXMLschemanamespace

背景:最近改造一个可执行jar包项目为spring+maven+mybatis框架,在对项目进行package后运行时遇到了报错开发环境操作系统:macosxIDE:intelli

背景:最近改造一个可执行jar包项目为spring+maven+mybatis框架,在对项目进行package后运行时遇到了报错

开发环境

操作系统:mac os x
IDE:intellij idea
maven版本:3.3.9

问题回放

项目是一个idea的典型多模块项目(有3个模块,其中2个模块我们称之为A和B吧,都是spring的项目,模块A依赖模块B,模块A是最终需要打包的模块),父项目的pom.xml仅做模块依赖管理用
1.在A模块的pom.xml中添加assembly插件的配置


maven-assembly-plugin
2.4


jar-with-dependencies



2.在A模块的目录下运行打包命令:mvn assembly:assembly
其中的original-xxx.jar是不带依赖模块的jar包,而xxx.jar便是带依赖模块的jar包

《maven-assembly-plugin打包spring项目Unable to locate Spring NamespaceHandler for XML schema namespace》

3.通过命令java -jar xxx.jar运行程序,发现错误信息如下:Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]

《maven-assembly-plugin打包spring项目Unable to locate Spring NamespaceHandler for XML schema namespace》

这是 assembly 插件的一个 bug:http://jira.codehaus.org/browse/MASSEMBLY-360,它在对第三方打包时,对于 META-INF 下的 spring.handlers,spring.schemas 等多个同名文件进行了覆盖,遗漏掉了一些版本的 xsd 本地映射。

如何查看打包后的spring.handlers,spring.schemas文件?
将打包后的jar包解压(如果不能解压,改后缀名为zip),在解压后的目录里面找到META-INF目录,下面就有这几个spring的文件:

《maven-assembly-plugin打包spring项目Unable to locate Spring NamespaceHandler for XML schema namespace》

当对模块A进行打包时,由于依赖B,且2个模块都是基于spring框架,各自有独立的spring相关配置文件,在使用assembly插件进行打包时,这些配置文件会相互覆盖掉

解决方法

更换为maven-shade-plugin插件来进行打包:
模块A的pom.xml配置如下:



org.apache.maven.plugins
maven-shade-plugin
1.4


package

shade



implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
META-INF/spring.handlers

implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
META-INF/spring.schemas







推荐阅读
  • 本文介绍了如何在WildFly 10中配置MySQL数据源时遇到的服务依赖问题及其解决方案。 ... [详细]
  • ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • Flowable 6.6.0 表单引擎在Web应用中的集成与使用
    本文档提供了Flowable 6.6.0版本中表单引擎在Web应用程序中的配置和使用指南,包括表单引擎的初始化、配置以及在Web环境下的具体实现方法。 ... [详细]
  • 本文详细介绍了如何在Kendo UI for jQuery的数据管理组件中,将行标题字段呈现为锚点(即可点击链接),帮助开发人员更高效地实现这一功能。通过具体的代码示例和解释,即使是新手也能轻松掌握。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • Win10 UWP 开发技巧:利用 XamlTreeDump 获取 XAML 元素树
    本文介绍如何在 Win10 UWP 开发中使用 XamlTreeDump 库来获取和转换 XAML 元素树为 JSON 字符串,这对于 UI 单元测试非常有用。 ... [详细]
  • 本文详细介绍了JSP(Java Server Pages)的九大内置对象及其功能,探讨了JSP与Servlet之间的关系及差异,并提供了实际编码示例。此外,还讨论了网页开发中常见的编码转换问题以及JSP的两种页面跳转方式。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • 在Java开发中,使用BASE64编码通常可以直接利用JDK内置的库。然而,在Android平台上,由于安全性和兼容性的考虑,直接引用JDK中的`sun.misc.BASE64Decoder`会导致错误,因此需要引入第三方库来实现相同的功能。 ... [详细]
  • Spring Boot 入门指南
    本文介绍了Spring Boot的基本概念及其在现代Java应用程序开发中的作用。Spring Boot旨在简化Spring应用的初始设置和开发过程,通过自动配置和约定优于配置的原则,帮助开发者快速构建基于Spring框架的应用。 ... [详细]
author-avatar
手机用户2502931803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有