码迷,mamicode.com
首页 > 编程语言 > 详细

java程序配置文件中路劲分隔符的选用

时间:2015-09-02 16:06:37      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:

一个小小的路劲分隔符,可以足足耽误一天的工作时间。这两天在构建一个以apache cxf为基础的restful webservice的小程序时,就卡在这个上面了。幸好运气不错,胡乱猜测加试验,找到了问题的所在。真不敢想象,如果人品背点不知道会被耽误多少时间。

问题就是在hibernate的cfg.xml中配置的mapping文件路径。当时图方便也为了防止拼写错误,就直接从windows浏览器中拷贝了路劲地址贴到cfg.xml中。windows的路径分割符是“\”。像这样的路径,如果是在java文件中,会需要使用转译符,否则编译会报错。当然使用 File.separator 才是最好的做法。

String str = "cn\\edu\\hdu\\grs\\tdlab\\domain\\hbm\\User.hbm.xml";

但在xml配置文件中,没有这么严格检查,配置如下:

<mapping resource="cn\edu\hdu\grs\tdlab\domain\hbm\User.hbm.xml"></mapping>

然后运行单元测试实现简单的CRUD,OK通过。最后使用gradle的application插件,发布成zip包。

本以为大功告成,然而在运行bat脚本时,错误出现了,提示hbm.xml找不到。

Exception in thread "main" org.hibernate.MappingNotFoundException: resource: cn\edu\hdu\grs\tdlab\domain\hbm\User.hbm.xml not found

虽然报错很明显提示找不到文件,但由于单元测试全部OK,所以没去怀疑路劲问题。一开始以为是打了jar包的问题,然后度娘出来一堆hibernate包含jar包中的hbm文件的文章。但这些文章的配置都是和spring集成的,直接使用cfg.xml的我是没找到。spring的 org.springframework.orm.hibernate3.LocalSessionFactoryBean 有mappingJarLocations【1】 ,  mappingLocations等属性,还能使用通配符配置hbm文件。然而我并不打算使用spring,由于项目很小beans不多,也不需要切面之类的,我就简单的在main中使用了一个静态map来维护beans。

然后我又毫无依据地尝试了一些办法,如:

  • 在mapping路径中加上classpath,classpath*;

  • 合并bin和lib目录,修改bat文件中的classpath,使bat和jar处于同一目录。

都没有成功。网上感觉有用的资料也都翻遍了。没办法,只能退一步,项目总得跑起来啊。于是,抱着死马当活马医的心态,放弃包结构,将hbm文件和cfg文件放在一个目录下,配置变成

<mapping resource="User.hbm.xml"></mapping>

clean,distZip。然后运行启动脚本,成功了。真是运气超好!

这表明我一开始怀疑的cfg.xml不查找jar包中的hbm的猜测是错误的。于是开始怀疑路劲问题,继续加上路劲,使用“/”替换原来的“\”,问题完美解决。

不过我还是很费解,为什么Junit跑起来一点问题都没有。单元测试都能过也给我这次解决问题带来了很大的影响。难道是因为我在windows平台做开发的缘故【2】?看来以后写代码还是要去linux下比较靠谱。

参考资料:

【1】hbm.xml文件在jar文件中 http://blog.csdn.net/ironskinspirit/article/details/6271093 

【2】java之路径分隔符介绍 http://www.169it.com/tech-java/article-13812651845528076664.html 

java程序配置文件中路劲分隔符的选用

标签:

原文地址:http://my.oschina.net/amhuman/blog/500689

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!