tamcat部署 springMVC项目问题及解决方案
记录下tamcat部署 SpringMVC项目过程中遇到的问题,以及解决方案
首先从svn上面检出项目,可以在本地新建一个文件夹,也可以在idea上面新建一个maven项目,用来存放检出的项目
项目检出成功后,点击pom.xml文件,将其加入maven项目,然后项目会根据pom.xml的自动下载依赖包,项目依赖包下载好以后,配置tamcat容器
点击加号选择tamcat容器版本,我这边用的是8.5版本,有的项目jdk版本和tamcat的版本不匹配,需要降低tamcat的版本,这里根据自己的实际项目来
tamcat配置过程中遇到过内存溢出问题,解决方式是设置VM options的属性,扩大内存
有的公司有本地环境和测试环境,这里Dspring.profiles.active=dev是让配置文件读取本地环境,Dspring.profiles.active=test则是读取测试环境的配置
-Dspring.profiles.active=dev
-Xms768m
-Xmx768m
-XX:PermSize=64M
-XX:MaxPermSize=512m
点击Deployment右边+号,选择Artifact,这里选择exploded可以自动更新代码,下面Application context设置的是项目启动完毕跳转的地址
设置成功以后,点击File-Project Stucture 设置项目属性,我这边项目使用的是1.8的jdk,如果项目比较老,可以选择1.6或者根据项目的配置文件选择,下面是项目编译后的目录
Modules里Dependencies是项目的jar,一般如果pom.xml文件依赖包下载下来的话,是会显示项目所用的jar包,如果没有,可以选择右上角+号手动添加,这个特别说明一下,如果是多个子项目有依赖,需要在项目中添加所依赖的项目的jar,但是一定要注意避免循环依赖,也就是互相依赖
Libraries一般是项目的jar,如果没有特别添加jar,一般不需要动
Artifacts里需要注意一下,需要将Aritfact加入到每个模块中,鼠标右键put into output Root ,否则会报错,后面就遇到这种情况
项目基本配置完成,这时候,可以build一下,看是否成功,如果存在编译问题,极有可能就是配置的依赖包有问题,这时候可以检查一下配置项,是否配置的位置不对,如果实在找不到,可以删除项目重新下载
项目构建没问题,就启动tamcat,这时候,项目会出现各种各样的问题,以下是我遇到的问题及解决方案,仅供参考
首先是idea中部分Java类标识变成一个J,其他引入这些类的class 就会报找不到包的异常,这时说明项目的资源路径配置是有问题的
resource文件对应于Mark as中的Resource,idea的project structures的modules中Mark As里的Sources内的文件区别
Error:java: System Java Compiler was not found in classpath: java.lang.ClassNotFoundException:
javaC需要配置1.6
Error:java: 警告: 源发行版 6 需要目标发行版 1.6
这时候报一个jdk版本的问题,这时候我才发现,原来项目是setting中配置的1.5的版本
打开setting,搜索java Compiler 设置项目的jdk的版本,另外勾掉Use compiler form module target JDK when possible,这里是使用自己的jdk,有时候虽然设置了,但是系统仍默认使用自己的jdk,就会报错
这就是我上面说的循环依赖问题,项目配置过程中,互相依赖,导致项目无法部署,这时候,只要打开配置,删除被依赖的项目的依赖就可以了
Error:Cannot build artifact 'zhxy-oa-java (1):war exploded' because it is included into a circular dependency (artifact 'zhxy-oa-java (1):war exploded', artifact 'zhxy-oa-java:war exploded')
这里就是配置文件没有配置好产生的问题,Ctrl+Alt+Shift+S弹出Project Structure窗口,在Output Layout标签中找到Available Elements,鼠标右击下面的元素:
org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class [org.springframework.web.context.ContextLoaderListener]
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
接下来是应用上下文失败,hibernate注入bean失败,这时候,要看自己的项目是否依赖别的项目的jar,或者是配置文件缺少pom.xml文件缺少jar的配置,我这里是缺少一个hibernate的jar
org.springframework.web.servlet.DispatcherServlet,Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'oaActivitiesDao': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoSupport' defined in class path resource [spring/springDao.xml]: Cannot resolve reference to bean 'sessionFactory_baseinfo' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory_baseinfo' defined in class path resource [spring/springDao.xml]: Cannot resolve reference to bean 'operateLogEntityInterceptor' while setting bean property 'entityInterceptor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'operateLogEntityInterceptor' defined in class path resource [spring/springDao.xml]: Cannot resolve reference to bean 'logSessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logSessionFactory' defined in class path resource [spring/springDao.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: