解决方案 »

  1.   

    贴出你的Spring配置, 和mvc注解配置
      

  2.   

    现在框架是springMVC+maven,maven打包成功,里面也有jar,但启动tomcat报错,说扫描不到我的service,下面这个方法在myclipse中没有这种配置
      

  3.   

    大神,我在myeclipse中运行项目,启动没问题,就是打成war包后,再启动tomcat才报错的。
      

  4.   

    <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>
    我直接贴代码吧。 你照着看下就知道
      

  5.   

    你是怎么测试的? 如果是web环境中,先去tomcat中项目的lib下面确认这个jar是否已经存在。如果存在这个jar, 那看看你spring mvc的配置是怎样的, 你具体是要扫描哪些注解类?我在使用spring过程中, 很多带注解的类也都是在依赖jar中, 只要路径配置正确,不存在扫描不到的情况。
      

  6.   


    这个我不清楚,我倒是弄过 tomcat正常,weblogic启动不行,说是说找不到类问题根源就是:配置自动扫描的时候,路径太短了,我配置的com , weblogic也有com包,先扫描weblogic导致包冲突找不到类,  然后我多加一级包路径 改成com.jfpal就行了
      

  7.   

    @shijing266
    我的配置保证没错的。因为直接在myeclipse中部署,运行都OK。
    就是将项目打包成war包后,放到tomcat中,启动报错。
      

  8.   

    如果war包打出来是正确的,那么一定是你的配置有问题!
      

  9.   

    如果war包打出来是正确的,那么一定是你的配置有问题!
    war包中确实有jar,但就是扫描不到,各种郁闷。、、
      

  10.   

    如果war包打出来是正确的,那么一定是你的配置有问题!
    war包中确实有jar,但就是扫描不到,各种郁闷。、、
    把异常贴出来看下
      

  11.   

    http://www.iteye.com/topic/1126642
      

  12.   


    项目A是web项目,项目b是jar,项目A引用了项目b,在myeclipse中 运行项目A,没问题。
    现在将项目A 打包成war,将war放在tomcat中,启动tomcat,报错。jar中所有的service都没扫描到。
      

  13.   


    项目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是否是最新的代码
      

  14.   


    项目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中包含最新的代码,我两个项目拥有同一个父项目的。 
      

  15.   


    项目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试下?
      

  16.   

    还是谢谢你了。whos2002110 我还不知道怎么单独给你分
      

  17.   

    是不是你的maven下面的jdk和开发环境下来的jdk不一致啊
      

  18.   

    jar的mainfest.mf里的信息是什么样的?是否包含了路径和class文件?
      

  19.   

    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包里的内容
      

  20.   

    明白你意思了。下面是mainfest.mf的内容,如图所示,包含了路径和类
      

  21.   

    <context:annotation-config/>去掉
    <context:component-scan base-package="*"/>改为<context:component-scan base-package="com.*"/>
      

  22.   

    非常感谢,是这句话问题:<context:component-scan base-package="*"/>改为<context:component-scan base-package="com.*"/>结贴。
      

  23.   

    所以问你mainfest.mf的信息,如果这里都没有包信息,那下面的话就不说了。
      

  24.   

    总结:
    问题:项目是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和各位大神。同时再问下版主,为什么写*扫描不到? 看了下书,没说明白..