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

一个小小的路劲分隔符,可以足足耽误一天的工作时间。这两天在构建一个以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

时间: 2024-07-28 13:39:52

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

【Java】利用Java对配置文件操作实现Java程序的国际化

不仅仅是大名鼎鼎的Struts2,即便是小小的Java程序也能够实现国际化,根本就不用像网上大部分所说的那样,非西欧字符,例如我们的中文,岛国的日语之类的,必须使用native2ascii转码,坦诚,国际化字符串的配置文件xx_语言.propreties并不支持非西欧字符,只能转码存储,但你完全可以利用到我在<[Java]配置文件概念,Java对配置文件的操作>(点击打开链接)所介绍的方法,利用Java程序完成这个国际化的配置文件.Java会帮你自动转码. 一.基本目标 完成对大名鼎鼎的hel

eclipse通过maven建立java se工程配置log4j,打包成zip,将jar包和配置文件分开,并以bat和sh文件启动java程序

一.新建maven的java工程 1.eclipse里file-new-other,选择maven Project 2.选中 Use default Workspace location,然后 next 3.选择maven-archetype-quitstart,然后next 4.填入工程信息,然后finish 6.新建好的工程结构如图 7.将test下和java下自动生成的java类删除,右键build-path选择好jdk版本,整个工程就建好了. 二.配置log4j 1.将工程目录调整成下图

Java程序员面试题集(86-115)

摘 要:下面的内容包括Struts 2和Hibernate的常见面试题,虽然Struts 2在2013年6月曝出高危漏洞后已经显得江河日下,而Spring MVC的异军突起更加加速了Struts 2的陨落,但面试中仍然有可能被问及和此框架相关的内容,毕竟Struts 2曾经被阿里巴巴.京东以及政府企业门户网站广泛采用.另一方面,Hibernate目前仍然是ORM框架中的中坚力量,MyBatis在此领域也有不容 忽视的一席之地,因此了解这两个ORM框架对Java程序员是很有必要的.第一期发布的Ja

java程序

This XML file does not appear to have any style information associated with it. The document tree is shown below.博客园_首页代码改变世界uuid:5de59c50-a92f-4447-96ed-ab86451ed183;id=61182014-07-27T11:59:08Zfeed.cnblogs.comhttp://www.cnblogs.com/jianyus/p/3865670

软件开发工程师(JAVA)中级考试大纲-----四(四)Log4J的原理及配置;Log4J常用的API;在项目中应用日志框架Log4J关键类和接口介绍;Java properties配置文件log

log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 1定义 log4j--log for java(java的日志) 在强调可重用组件开发的今天,除了

给你的JAVA程序配置参数(Properties的使用)

我们在写JAVA程序时,很多时候运行程序的参数是需要动态改变的 测试时一系列参数,运行时一系列参数 又或者数据库地址也需要配一套参数,以方便今后的动态部署 这些变量的初始化,我们在写小DEMO时完全可以写死在JAVA文件中 但程序需要发布或者局部部署时,这些参数就需要脱离程序代码了 我们有多种存放参数的方式,比如数据库.XML文件又或者直接是txt文件 现在介绍一种使用JAVA,简单方便的参数读取方式 .properties文件,我们并不陌生,很多优秀的框架中就能看到它的存在,比如Hiberna

如何通过Java程序提交yarn的mapreduce计算任务

由于项目需求,需要通过Java程序提交Yarn的MapReduce的计算任务.与一般的通过Jar包提交MapReduce任务不同,通过程序提交MapReduce任务需要有点小变动,详见以下代码. 以下为MapReduce主程序,有几点需要提一下: 1.在程序中,我将文件读入格式设定为WholeFileInputFormat,即不对文件进行切分. 2.为了控制reduce的处理过程,map的输出键的格式为组合键格式.与常规的<key,value>不同,这里变为了<TextPair,Valu

解决 Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的方法

Mac OS X 下基于 Java 的程序(如 IntelliJ IDEA.jEdit 等)会出现中文标点输入无效的问题,在中文输入法状态,可以输入中文字,但输入中文标点最后上去的是英文标点.查阅了相关资料,原来这是 Java 自己的 bug.从 Java 8u51 版本开始就出现了这个 bug,一直到现在最新的 Java 8u72 仍然如此,但是老版本 Java 8u45 是没有这个问题的.所以,可以采取变通的方法,在 Mac OS X 上同时装一个老版本的 JDK 8u45,不会影响已经安装

一个java程序员的真实经历

半路出家的老java程序员的一点感悟 我是一个老java程序员,现在基本告别编码时代了,当然我现在还在写代码,不是为了老板写了,是自己在创业.回想起这么多年的人生路,作为一名老程序员感慨颇多,尤其是作为一名半路出家的程序员,其中的滋味更是感慨万分.下面我就自己说说我的经历,也许会给未来码农一点启发. 首先讲讲我是怎么成为一个程序员的,这个还真要说说中国的教育.我们国家的这种应试教育一直受到很多人的诟病,有的指责扼杀了学生的创造力,有的指责培养出来的学生就像火腿厂生产的香肠,都是一个味毫无特点而言