最近开发一个高德地图项目,使用的框架是mybatis+spring,打成jar包运行的方式,但是在eclipse中正在运行,却在打成jar包后无法运行,错误信息如下
C:\Users\Administrator\Desktop\collectiongaode>java -Dcollectiongaode.dir=C:\Users\Administrator\Desktop\collectiongaode -jar C:\Users\Administrator\D
esktop\collectiongaode/lib/gaode.jar
2017-04-20 10:10:52.269, [main ], [INFO ], AbstractApplicationContext.(510), | Refreshing org.springframework.context.support.FileSystemXmlApplica
tionContext@14387bc2: startup date [Thu Apr 20 10:10:52 CST 2017]; root of context hierarchy
2017-04-20 10:10:52.312, [main ], [INFO ], XmlBeanDefinitionReader.(315), | Loading XML bean definitions from URL [file:C:/Users/Administrator/Des
ktop/collectiongaode/conf/applicationContext.xml]
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.panso.CollectionGaode.service.impl.ReadFileServiceImpl.<init>(ReadFileServiceImpl.java:27)
at com.panso.CollectionGaode.main.CollectionMain.main(CollectionMain.java:28)
Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler f
or XML schema namespace [http://www.springframework.org/schema/tx]
Offending resource: URL [file:C:/Users/Administrator/Desktop/collectiongaode/conf/applicationContext.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.jav
a: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.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
at com.panso.CollectionGaode.utils.ApplicationContextFactory.<clinit>(ApplicationContextFactory.java:11)
... 2 more
最主要的而是这句报错
Unable to locate Spring NamespaceHandler f
or XML schema namespace [http://www.springframework.org/schema/tx]
找了很多资料,有的说是jar包没有,有的说是META-INF/spring.schemas 文件的问题。
后来在打jar包的时候发现,Runnable jar 有三种方式
Extract required libraires into generated JAR
Package required libraies into generated JAR
Copy required libraries into a sub-folder next to the generated JAR
我一开始使用的是第一种方式,再尝试第二种方式,就不报错了。
整理了下三种方式jar包的文件夹结构
extract 方式 依赖的jar包都变成了class文件
package方式 把依赖的jar包放在根目录下
copy方式,依赖jar包放在单独一个文件夹里面