spring3 mvc使用注解方式时,不能扫描jar包里面的类 springmvc 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 贴出你的Spring配置, 和mvc注解配置 现在框架是springMVC+maven,maven打包成功,里面也有jar,但启动tomcat报错,说扫描不到我的service,下面这个方法在myclipse中没有这种配置 大神,我在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包打出来是正确的,那么一定是你的配置有问题!war包中确实有jar,但就是扫描不到,各种郁闷。、、 如果war包打出来是正确的,那么一定是你的配置有问题!war包中确实有jar,但就是扫描不到,各种郁闷。、、把异常贴出来看下 http://www.iteye.com/topic/1126642 项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。 项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。首先A,b两个项目是否同为一个项目的不同模块, 我估计你的不是, 那么在ide里面你如果修改了b中的代码,比如加了注解,加了类,直接启动是能即使生效的。 但是打包的时候,如果不是具有相同的父项目,则新代码需要重新打包安装的本地maven中, 也就是你要先把b项目install到本地, 然后再打包A,这是的war才具有最新的代码。不晓得你明白我的意思没, 你尝试用反编译工具看下你当前war下面的jar是否是最新的代码 项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。首先A,b两个项目是否同为一个项目的不同模块, 我估计你的不是, 那么在ide里面你如果修改了b中的代码,比如加了注解,加了类,直接启动是能即使生效的。 但是打包的时候,如果不是具有相同的父项目,则新代码需要重新打包安装的本地maven中, 也就是你要先把b项目install到本地, 然后再打包A,这是的war才具有最新的代码。不晓得你明白我的意思没, 你尝试用反编译工具看下你当前war下面的jar是否是最新的代码我明白你的意思,打包后的war中包含最新的代码,我两个项目拥有同一个父项目的。 项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。首先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.0Built-By: AdministratorBuild-Jdk: 1.7.0_09Created-By: Apache Maven 3.2.1Archiver-Version: Plexus Archiver这个jar包里的内容 明白你意思了。下面是mainfest.mf的内容,如图所示,包含了路径和类 <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、 配置deployment assembly 4、jdk 什么的版本确保一致其他的比较杂乱了。郁闷2天的问题,至此结束,再次谢谢版主fangmingshijie和各位大神。同时再问下版主,为什么写*扫描不到? 看了下书,没说明白.. flex HelloWorld ORA-01460: 转换请求无法实现或不合理 验证URL是否真实有效 Hibernate中使用ThreadLocal的疑问 zk 框架的树形菜单 oa系统的授权与认证 我的留言本中文显示为乱码,谁能帮帮我? 觉得struts好用的都过来撒 希望得到一个在tomcat下能用的jsp文件上传的例子(200分) Tx DataSource和DataSource有什么区别 如何修改jar包中的properties文件? spring+Junit测试 Failed to load ApplicationContext
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>
我直接贴代码吧。 你照着看下就知道
这个我不清楚,我倒是弄过 tomcat正常,weblogic启动不行,说是说找不到类问题根源就是:配置自动扫描的时候,路径太短了,我配置的com , weblogic也有com包,先扫描weblogic导致包冲突找不到类, 然后我多加一级包路径 改成com.jfpal就行了
我的配置保证没错的。因为直接在myeclipse中部署,运行都OK。
就是将项目打包成war包后,放到tomcat中,启动报错。
war包中确实有jar,但就是扫描不到,各种郁闷。、、
war包中确实有jar,但就是扫描不到,各种郁闷。、、
把异常贴出来看下
项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。
现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。
项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。
现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。首先A,b两个项目是否同为一个项目的不同模块, 我估计你的不是, 那么在ide里面你如果修改了b中的代码,比如加了注解,加了类,直接启动是能即使生效的。 但是打包的时候,如果不是具有相同的父项目,则新代码需要重新打包安装的本地maven中, 也就是你要先把b项目install到本地, 然后再打包A,这是的war才具有最新的代码。不晓得你明白我的意思没, 你尝试用反编译工具看下你当前war下面的jar是否是最新的代码
项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。
现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。首先A,b两个项目是否同为一个项目的不同模块, 我估计你的不是, 那么在ide里面你如果修改了b中的代码,比如加了注解,加了类,直接启动是能即使生效的。 但是打包的时候,如果不是具有相同的父项目,则新代码需要重新打包安装的本地maven中, 也就是你要先把b项目install到本地, 然后再打包A,这是的war才具有最新的代码。不晓得你明白我的意思没, 你尝试用反编译工具看下你当前war下面的jar是否是最新的代码
我明白你的意思,打包后的war中包含最新的代码,我两个项目拥有同一个父项目的。
项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。
现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。首先A,b两个项目是否同为一个项目的不同模块, 我估计你的不是, 那么在ide里面你如果修改了b中的代码,比如加了注解,加了类,直接启动是能即使生效的。 但是打包的时候,如果不是具有相同的父项目,则新代码需要重新打包安装的本地maven中, 也就是你要先把b项目install到本地, 然后再打包A,这是的war才具有最新的代码。不晓得你明白我的意思没, 你尝试用反编译工具看下你当前war下面的jar是否是最新的代码
我明白你的意思,打包后的war中包含最新的代码,我两个项目拥有同一个父项目的。
好吧, 这样你在eclipse里面能正确运行,那配置是没问题的了, 我想不到有什么其它原因了, 要不你换个tomcat试下?
Built-By: Administrator
Build-Jdk: 1.7.0_09
Created-By: Apache Maven 3.2.1
Archiver-Version: Plexus Archiver
这个jar包里的内容
<context:component-scan base-package="*"/>改为<context:component-scan base-package="com.*"/>
问题:项目是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、 配置deployment assembly
4、jdk 什么的版本确保一致
其他的比较杂乱了。郁闷2天的问题,至此结束,再次谢谢版主fangmingshijie和各位大神。同时再问下版主,为什么写*扫描不到? 看了下书,没说明白..