一个Maven插件引发的错误
2013-12-10 01:34
393 查看
翻到一个前些天同事发来的邮件,内容如下:
就是一个普通的Maven工程,spring 文件中声明了一个bean,主类只调用一句代码:
这段代码和配置是没有问题的,以至于找不出错误原因来。
我建了个简单的工程来模拟,发现也有这个现象,便关注了一下。
经排查也没发现任何问题,便检查了一下打包后的jar中class文件的md5,同仓库中jar包中的class文件比对了下,发现文件是不同的。
同事要求将工程所有文件连同依赖打包为一个jar文件,这是个很奇怪的要求,且不谈与模块化背道而驰,各种依赖混在一起,光版本冲突问题就极难有效解决。
至于打包为什么会导致依赖发生变化,是使用了一个maven插件导致:
于是建议同事不要用这个插件了。这插件的古怪行为我就没兴趣追究了,将所有文件打包为一个jar,居然会有这种功能的插件,我怀疑是谁太无聊了才会写这么个东西
INFO [XmlBeanDefinitionReader] (XmlBeanDefinitionReader.java:315) - Loading XML bean definitions from URL [jar:file:/home/eagle/work-project/code/work/logMonitor/bmp/bmp-mq-consumer/target/bmp-mq-consumer-0.0.1.jar!/spring/collect-config.xml] Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/tx] Offending resource: URL [jar:file:/home/eagle/work-project/code/work/logMonitor/bmp/bmp-mq-consumer/target/bmp-mq-consumer-0.0.1.jar!/spring/collect-config.xml] at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:318) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1435) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:185) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
就是一个普通的Maven工程,spring 文件中声明了一个bean,主类只调用一句代码:
ClassPathXmlApplicationContext application = new ClassPathXmlApplicationContext( "classpath*:spring/*.xml");在eclipse中运行没有任何问题,但打包后再运行jar文件就会出现上述异常。
这段代码和配置是没有问题的,以至于找不出错误原因来。
我建了个简单的工程来模拟,发现也有这个现象,便关注了一下。
经排查也没发现任何问题,便检查了一下打包后的jar中class文件的md5,同仓库中jar包中的class文件比对了下,发现文件是不同的。
同事要求将工程所有文件连同依赖打包为一个jar文件,这是个很奇怪的要求,且不谈与模块化背道而驰,各种依赖混在一起,光版本冲突问题就极难有效解决。
至于打包为什么会导致依赖发生变化,是使用了一个maven插件导致:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin>
于是建议同事不要用这个插件了。这插件的古怪行为我就没兴趣追究了,将所有文件打包为一个jar,居然会有这种功能的插件,我怀疑是谁太无聊了才会写这么个东西
相关文章推荐
- 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project
- 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project
- 使用Eclipse+maven3插件开发一个Servlet3.0的简单例子
- maven引入jar包时,一个jar的引入错误,会导致后来的jar包的引入。
- js错误--引发表单验证插件中的required属性失效,一些js功能失效
- Wordpress安装插件,发生了一个未知错误(An unknown error occurred)
- [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之glassfish篇(二)
- 利用反射写一个简单的错误日志插件
- 一个分号引发的错误!——undefined is not a function
- Maven+SpringMVC+Eclipse软件安装配置,Maven报插件异常,Eclipse总是卡死的解决方法,导入一个maven工程后 一直显示importing maven project
- 使用 Eclipse 的 Maven 2 插件开发一个 JEE 项目
- 一个分号引发的错误
- pom文件出现maven插件错误
- 在用m2eclipse插件构建一个maven项目,碰到的小问题。
- eclipse 安装完Maven插件之后启动时候弹出错误:'Updating indexes' has encountered a problem.
- 一个maven错误:org/apache/maven/shared/filtering/MavenFilteringException
- 安卓插件错误解决办法(用AutoLayout布局会用到可能)classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
- 使用eclipse Maven插件创建一个web project
- 关于一个"="与"+="号引发的错误
- maven 一个诡异的错误