最近由于项目平台上开发新的子项目,发现平台结构越来越复杂,非常难看,也不便于维护。于是乎将平台基础部分进行了打包,扔到lib里面去。
jar包打好了,启动tomcat测试,启动时就报错了,说无法创建hibernate的sessionfactory,不可能啊,我没打包之前都是好的,难道打包就不能用了?检查,发现是扫描hbm.xml映射文件失败,于是检查hibernate配置文件,有这么几行代码:
<property name="mappingDirectoryLocations"> <list> <value>classpath:com/per/domain</value> </list> </property>
查阅mappingDirectoryLocations的相关资料,有这么一些描述:
写道
LocalSessionFactoryBean有好几个属性用来查找hibernate映射文件:mappingResources、mappingLocations、mappingDirectoryLocations与mappingJarLocations
他们的区别:
mappingResources:指定classpath下具体映射文件名
<property name="mappingResources">
<value>petclinic.hbm.xml </value>
</property>
mappingLocations:可以指定任何文件路径,并且可以指定前缀:classpath、file等
<property name="mappingLocations">
<value>/WEB-INF/petclinic.hbm.xml </value>
</property>
<property name="mappingLocations">
<value>classpath:/com/company/domain/petclinic.hbm.xml </value>
</property>
也可以用通配符指定,'*'指定一个文件(路径)名,'**'指定多个文件(路径)名,例如:
<property name="mappingLocations">
<value>classpath:/com/company/domainmaps/*.hbm.xml </value>
</property>
上面的配置是在com/company/domain包下任何maps路径下的hbm.xml文件都被加载为映射文件
mappingDirectoryLocations:指定映射的文件路径
<property name="mappingDirectoryLocations">
<list>
<value>WEB-INF/HibernateMappings</value>
</list>
</property>
也可以通过classpath来指出
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/XXX/package/</value>
</list>
</property>
mappingJarLocations:指定加载的映射文件在jar文件中
他们的区别:
mappingResources:指定classpath下具体映射文件名
<property name="mappingResources">
<value>petclinic.hbm.xml </value>
</property>
mappingLocations:可以指定任何文件路径,并且可以指定前缀:classpath、file等
<property name="mappingLocations">
<value>/WEB-INF/petclinic.hbm.xml </value>
</property>
<property name="mappingLocations">
<value>classpath:/com/company/domain/petclinic.hbm.xml </value>
</property>
也可以用通配符指定,'*'指定一个文件(路径)名,'**'指定多个文件(路径)名,例如:
<property name="mappingLocations">
<value>classpath:/com/company/domainmaps/*.hbm.xml </value>
</property>
上面的配置是在com/company/domain包下任何maps路径下的hbm.xml文件都被加载为映射文件
mappingDirectoryLocations:指定映射的文件路径
<property name="mappingDirectoryLocations">
<list>
<value>WEB-INF/HibernateMappings</value>
</list>
</property>
也可以通过classpath来指出
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/XXX/package/</value>
</list>
</property>
mappingJarLocations:指定加载的映射文件在jar文件中
哦,原来有个mappingJarLocations属性,于是赶紧搜mappingJarLocations的资料,在本网站内看到如下一段内容:
http://zprill.iteye.com/blog/716197写道
<property name="mappingLocations">
<list>
<value>classpath:com/test/hbm/*.hbm.xml</value>
</list>
</property>
当hbm文件被打成jar包时,上面的方法就不能用了。幸亏org.springframework.orm.hibernate3.LocalSessionFactoryBean还有mappingJarLocations属性。
<property name="mappingJarLocations">
<list>
<value>WEB-INF/lib/test.jar</value>
</list>
</property>
这样就不怕被读不到文件了
<list>
<value>classpath:com/test/hbm/*.hbm.xml</value>
</list>
</property>
当hbm文件被打成jar包时,上面的方法就不能用了。幸亏org.springframework.orm.hibernate3.LocalSessionFactoryBean还有mappingJarLocations属性。
<property name="mappingJarLocations">
<list>
<value>WEB-INF/lib/test.jar</value>
</list>
</property>
这样就不怕被读不到文件了
好了,赶快改吧,将上面有问题的代码改成这样:
<property name="mappingJarLocations"> <list> <value>WEB-INF/lib/comm-base.jar</value> </list> </property> <property name="mappingDirectoryLocations"> <list> <value>classpath:com/per/**/domain</value> </list> </property>
重启tomcat ,好了,这下没报错了。不过新的问题来了,原来可以访问的网页现在访问报404错误。奇怪了,再google一把,原来是jar包的问题,跟这位仁兄是一样的问题:
http://xinglu.iteye.com/blog/1457029 写道
近期在用spring3做一个项目,用到了里面的一个自动扫描组件的特性.但是工程分为了好多个小项目,有个统一的开发平台,这个平台的支撑类会被我做成一个jar包被其它几个子工程引用.
开发的时候使用的是工厂引用工厂的方式,在eclipse里面的classpath里面把该平台工厂引入即可,避免了每次修改了平台代码都要重新打包的问题.这个方法不是在web project类型,对于web-project,还是需要沿用老办法,即打成jar包,然后让web-project引用进来.
这时发现个问题,就是平台下junit测试正常的一些spring bean,到了web-project里面发现无法关联到了.
搞了很久,也上网查了很多资料,一开始以为是要修改<context:component-scan >里面的resource-pattern属性,后来改来改去都解决不了问题.
最后发现一个问题,是我们的eclipse自带的jar打包程序,默认打包的时候有个选项<Add directory entries>没有勾选,只要勾选了,就完全没有问题了,无须再对<context:component-scan >进行任何修改了.
罪恶的<Add directory entries>选项啊!
开发的时候使用的是工厂引用工厂的方式,在eclipse里面的classpath里面把该平台工厂引入即可,避免了每次修改了平台代码都要重新打包的问题.这个方法不是在web project类型,对于web-project,还是需要沿用老办法,即打成jar包,然后让web-project引用进来.
这时发现个问题,就是平台下junit测试正常的一些spring bean,到了web-project里面发现无法关联到了.
搞了很久,也上网查了很多资料,一开始以为是要修改<context:component-scan >里面的resource-pattern属性,后来改来改去都解决不了问题.
最后发现一个问题,是我们的eclipse自带的jar打包程序,默认打包的时候有个选项<Add directory entries>没有勾选,只要勾选了,就完全没有问题了,无须再对<context:component-scan >进行任何修改了.
罪恶的<Add directory entries>选项啊!
好了,重新打包,再试,ok,问题解决。
小细节可真多啊~记录在此,以备后查吧。
相关推荐
springmvc需要的jar包,pom.xml类型的,使用方式见链接https://blog.csdn.net/u010924720/article/details/97898578
spring整合springmvc、mybatis的jar包和配置文件,spring整合springmvc、mybatis的jar包和配置文件,spring整合springmvc、mybatis的jar包和配置文件
springmvc+hibernate的maven工程pom.xml文件配置
springmvc,mybaitis json jar包Spring各jar包详解spring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar,aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。 spring-src.zip就是所有的源...
ssm配置文件springmvc.xml
这是一个springmvc-config.xml文件,<?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:...
springMVC+JAP整合彻底摆脱persistence.xml配置文件 spring与jpa整合 除去persistence.xml配置文件 使用属性文件 数据源dbcp访问数据库.
springmvc项目中如何加载jar包中的spring配置文件
spring springmvc mybatis的整合jar包,以及mysql,Junit,fastJson等的jar包,导入这些jar包 搭一个SSM的环境,可以使用SSM框架做一个简单的能够实现增删改查的小项目,具体的jar包及其版本如下 : aopalliance-1.0....
springMVC支持ajax的jar包,包括 jackson-annotations-2.1.5.jar jackson-core-2.1.4.jar jackson-databind-2.4.3.jar
springmvc jar包 springmvc jar包 springmvc jar包...
springmvc 各种jar包 apache springmvc 等 0,activation-1.1.1.jar 1,aliyun-openservices-1.0.12.jar 2,antlr-2.7.7.jar 3,aopalliance-1.0.jar 4,asm-all-3.1.jar 5,bcprov-jdk15on-147.jar 6,c3p0-0.9.2.1....
spring-mvc.xml spring-mybatis.xml web.xml log4j.properties,项目中需要用到的配置文件。直接可用。
SpringMVC所有jar包和配置文件可以快速配置springmvc项目
spring与jpa整合 除去persistence.xml配置文件 使用属性文件 数据源dbcp访问数据库
NULL 博文链接:https://shihuan830619.iteye.com/blog/2106026
很全面的jar包,可以直接用于springmvc+hibernate项目开发。
springmvc独立运行jar包集合,经过测试可以运行,Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对Struts 2的超越。现在...
springmvc中实现文件上传所要用到的jar包
hibernate3.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、antlr-2.7.6.jar、commons-collections-3.1、dom4j-1.6.1.jar、javassist-3.12.0.GA.jar、jta-1.1.jar、slf4j-api-1.6.1.jar、slf4j-nop-1.6.2.jar