maven项目,eclipse export runnable jar之后, 启动的main方法: public static void main(String[] args) { ApplicationContext context =new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml","task.xml"}); } 运行后报错: hy [2013-07-24 09:55:23,864 INFO at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:315)] Loading XML bean definitions from class path resource [applicationContext.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/context] Offending resource: class path resource [applicationContext.xml] 求一个解决办法,怎么才能找到这个配置文件呢,扯蛋的就别回答了. |
|
jar包中的类通过如下方法获得配置文件路径或加载配置文件 ,原理是在运行时通过类的classLoader获得资源
URL fileURL=this.getClass().getResource(“/config/application.xml”);//jar中的类获得jar包中资源文件的路径 InputStream is=this.getClass().getResourceAsStream(“/config/application.xml”);//jar中的类读入jar包中的资源文件 |
|
老大,我加载spring呢,能这么加载吗 |
|
加载spring如果不是默认目录,肯定要指定文件路径,总不可能spring在整个jar里面遍历xml文件吧
|
|
我指定的就是根目录,怎么可能遍历,…… |
|
没看仔细,被1L带沟里了
Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context] xml文件内容有问题,开头几行贴一下吧可能http://www.springframework.org/schema/context相关的内容删掉就可以了 |
|
确定没问题 ,可以run的,导成jar以后不行了就是 |
|
好久没打jar包,都忘了有这茬儿,
用常用的方法获取配置文件要放在jar外。 在jar里面,一种是用解析jar文件的方式,一种是2L说的那种。 |
|
ClassPathXmlApplicationContext这个类只能读放在web-info/classes目录下的配置文件,你卡看你这个目录下有没有这个东西再说。
|
|
不是web项目,怎么会有web-info |
|
那怎么能放到jar外呢? |
|
就跟jar文件相同目录
|
|
自己好好去学习ClassPathXmlApplicationContext这个类的加载路径。
|
|
40分 |
你好,我也发现了这个问题,去网上查了一下,试了,如果你是工程直接调用该jar包(classPath相同)的话,用下面的:
ApplicationContext context = new ClassPathXmlApplicationContext(“classpath*:config/appContext.xml”); 即加载处于classpath下的文件,但是这个加载不直观,因为即使找不到文件,spring也不会报错,只是返回的applicationContext没有内容,这种可以直接读取到 |
对你这种不懂装懂 我除了XX二字没什么送你了 |
|
这种 classpath 还有 classpath* 我也试过了 也取不到 |
|
好吧,你赢了。傻逼 |
|
写过几个项目就以为自己什么都懂了,懂了还到这里问你妹呀,别人好心给你解答,你还XX,xx你妹啊。
|
|
觉得很奇怪,如果将该jar包放到其他工程下并进行加载的时候,我说的那个方法是可以运行的(亲自尝试),你可以新建一个工程,把jar包打好放上去,用代码调用能够正确执行,但是如果是可执行/或者调用执行时会出现找不到文件的情况,现在没有办法我都改成properties的形式了,如果有时间再研究,可能是代码问题。但是我觉得spring作为这样一个成熟的框架,应该开发一个可以供Resource或者inputStream类型输入的ApplicationContext,这样搞前无头,后无绪,有点无奈了。。。
|
|
SB,不懂不要回答问题,OK?看着你这种人就心烦 |
|
确实是那样的情况,我也有点搞不懂诶… |
|
我去你玛丽隔壁 |
|
new ClassPathXmlApplicationContext(new String[]{xx你妹.xml})是从web-info/classes取,废物东西。
|
|
你这种人就像条疯狗一样,别人给你骨头吃,你还反口咬人。从楼上几个人回复你的问题来看,你态度很是恶劣,别人在帮助你,又不是xx你妹,你恶劣什么?自己很懂,这么简单的问题还拿出来问个球?不知好歹的废物一个,再说一句,我去你玛丽隔壁。
|
|
你搞清楚什么叫做classpath再说吧 |
|
我看是你个傻逼废物不明白 |
|
我也遇到这个问题了 但是我的解决了 我直接用myeclipse打war包 打jar包的时候勾选Add directory entries 就可以了
|
|
上次我虽然改成了properties方法,但是后来又出现一个问题,也是quartz调用Jar包时出现的问题,会出现找不到本Jar包内的类而报错,我想,如果是类或者文件加载不上,可能是由于调用和本jar包内的ClassLoader不一致,于是,使用了强行切换ClassLoader的方法
比如本jar包内有XXX.class 那么使用 ClassLoader classLoader2 = XXX.class.getClassLoader(); //因为可能存在调用工程ClassLoader与当前job运行的ClassLoader不一致而导致类加载失败,所以将运行线程的classLoader设置为当前类ClassLoader路径 Thread.currentThread().setContextClassLoader(classLoader2); spring和xstream(我用的工程组件)都需要读取ClassLoader,如果线程ClassLoader不与本jar包的加载Loader相同,可能会导致文件找不到,如果你还在为此困惑的话,可以试一试,我由于已经取代了spring读取,所以没有经过后来的尝试,全靠你了! |
|
哥们,我也越到这个问题了,你解决了没有,我整了一天,怎么弄都不行!
|
|
这个问题怎么解决的,最后?
|
|
1.参考14楼读配置 |
|
最后怎么解决呢、。?
|
|
打包的问题,fat jar打包默认只把jar里面的配置(handler类,好像),只加载第一行,所以有的东西找不到处理类。找到那个东西直接拷贝到你的jar包的相应的地方,看报错信息应该可以找到。
|