如题,在线回复,求大神。晚上有很多人都遇到了,说是用eclipse导出时选择Add directory entries选项,如这个贴:http://yizhilong28.iteye.com/blog/1146830,这个帖子下面说用这个方法: |
|
贴出你的Spring配置, 和mvc注解配置
|
|
大神,我在myeclipse中运行项目,启动没问题,就是打成war包后,再启动tomcat才报错的。 |
|
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 不推荐使用的配置,对自定义拦截器使用起来不方便 <mvc:annotation-driven /> --> <!-- 自定义拦截器配置手动配置更灵活,可以从拦截器中获取想要的类名,方法名等信息推荐使用,而且这种配置 只拦截@Controller,不需要在拦截器中过滤静态文件 --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> </list> </property> </bean> <!-- 这里手动注册springmvc的注解依赖,可以灵活配置 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="textHttpMessageConverter"/> <ref bean="jsonHttpMessageConverter"/> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean> </list> </property> <property name="webBindingInitializer"> <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> </bean> </property> </bean> <!-- <context:annotation-config/> --> <!-- 实现 RESTful的风格,显示指定需要转换的响应格式类型 --> <bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller" /> <!-- xml --> <bean id="xmlMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> <constructor-arg ref="xstreamMarshaller" /> <property name="supportedMediaTypes" value="application/xml" /> </bean> <!-- json --> <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="prefixJson" value="false" /> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- text --> <bean id="textHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <!-- 静态文件 --> <mvc:resources mapping="/css/**" location="/css/" /> <mvc:resources mapping="/js/**" location="/js/" /> <!-- 需要扫描的标注了@Controller的类 --> <context:component-scan base-package="com.jfpal"> <context:include-filter type="regex" expression=".*.*.action.*" /> <!-- 这里排除service,防止事务失效 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix"> <value>/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1024000000"></property> <property name="defaultEncoding" value="utf-8"></property> </bean> </beans> 我直接贴代码吧。 你照着看下就知道 |
|
你是怎么测试的? 如果是web环境中,先去tomcat中项目的lib下面确认这个jar是否已经存在。
如果存在这个jar, 那看看你spring mvc的配置是怎样的, 你具体是要扫描哪些注解类? 我在使用spring过程中, 很多带注解的类也都是在依赖jar中, 只要路径配置正确,不存在扫描不到的情况。 |
|
这个我不清楚,我倒是弄过 tomcat正常,weblogic启动不行,说是说找不到类 问题根源就是:配置自动扫描的时候,路径太短了,我配置的com , weblogic也有com包,先扫描weblogic导致包冲突找不到类, 然后我多加一级包路径 改成com.jfpal就行了 |
|
@shijing266
我的配置保证没错的。因为直接在myeclipse中部署,运行都OK。 就是将项目打包成war包后,放到tomcat中,启动报错。 |
|
如果war包打出来是正确的,那么一定是你的配置有问题! |
|
扫描路径配置的是*
|
|
war包中确实有jar,但就是扫描不到,各种郁闷。、、 |
|
把异常贴出来看下 |
|
http://www.iteye.com/topic/1126642
|
|
项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。 |
|
首先A,b两个项目是否同为一个项目的不同模块, 我估计你的不是, 那么在ide里面你如果修改了b中的代码,比如加了注解,加了类,直接启动是能即使生效的。 但是打包的时候,如果不是具有相同的父项目,则新代码需要重新打包安装的本地maven中, 也就是你要先把b项目install到本地, 然后再打包A,这是的war才具有最新的代码。 不晓得你明白我的意思没, 你尝试用反编译工具看下你当前war下面的jar是否是最新的代码 |
|
我明白你的意思,打包后的war中包含最新的代码,我两个项目拥有同一个父项目的。 |
|
好吧, 这样你在eclipse里面能正确运行,那配置是没问题的了, 我想不到有什么其它原因了, 要不你换个tomcat试下? |
|
还是谢谢你了。whos2002110 我还不知道怎么单独给你分
|
|
是不是你的maven下面的jdk和开发环境下来的jdk不一致啊
|
|
jar的mainfest.mf里的信息是什么样的?是否包含了路径和class文件?
|
|
感觉路径环境的问题。
|
|
版主大大,说实话,我没看懂你的意思 |
|
Manifest-Version: 1.0
Built-By: Administrator Build-Jdk: 1.7.0_09 Created-By: Apache Maven 3.2.1 Archiver-Version: Plexus Archiver 这个jar包里的内容 |
|
昨晚郁闷了一晚上,今晚继续搞
|
|
真的假的啊。我试试
|
|
还有大神在嘛
|
|
明白你意思了。下面是mainfest.mf的内容,如图所示,包含了路径和类 |
|
100分 |
<context:annotation-config/>去掉
<context:component-scan base-package=”*”/>改为<context:component-scan base-package=”com.*”/> |
非常感谢,是这句话问题:<context:component-scan base-package=”*”/>改为<context:component-scan base-package=”com.*”/> 结贴。 |
|
所以问你mainfest.mf的信息,如果这里都没有包信息,那下面的话就不说了。
|
|
总结:
问题:项目是springMVC+maven 架构。其中某子项目是jar,在项目里运行没问题,打包成war后,springMVC扫描不到jar中的注解 类。 解决过程,从网山查资料,各解决方法如下 1、就是在用eclipse export jar的时候,勾选add directory entries 我用的是myeclipse,而且不能每次install后 都这么导出,一是环境不同,二是麻烦; 2、使用maven版本:3.0.4, 3.0.5 ,3.2.0, 3.2.1 打包后,jar tf 查看install后的jar,发现带有路径和类信息。3.0.4以下的版本未进行 测试 3、 4、jdk 什么的版本确保一致 其他的比较杂乱了。郁闷2天的问题,至此结束,再次谢谢版主fangmingshijie和各位大神。同时再问下版主,为什么写*扫描不到? 看了下书,没说明白.. |