Spring上下文:组件扫描无法在POM中引用的另一个Eclipse项目依赖项中查找组件

Jos*_*osh 7 eclipse gwt spring m2eclipse maven

我正在研究分成两个Eclipse项目(myclient和myservice)的GWT Web应用程序.

myclient项目通过POM中的依赖项引用myservice项目.

<dependency>
<groupId>com.myproject</groupId>
<artifactId>myservices</artifactId>
<version>1.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

myclient项目有一个WAR目录src/main/webapp.myclient项目的输出文件夹是src/main/webapp/WEB-INF/classes.

myclient项目有一个Spring描述符application-context.xml,其中包含以下内容

<context:component-scan base-package="com.myproject.myclient, com.myproject.myservices"/>
Run Code Online (Sandbox Code Playgroud)

和web.xml

<web-app>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/application-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener> 
...
</web-app>
Run Code Online (Sandbox Code Playgroud)

我在myservices项目中有几个文件,注释为spring @Component,@ Service,@ Configuration,但是当我在Eclipse中运行GWT应用程序时,组件扫描不会拾取这些文件.作为测试,我尝试将@Component放置在myclient项目中,并且已成功创建.

我相信应用程序启动期间的以下日志条目表明问题的根源

org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved location pattern [classpath*:com/myproject/myservices/**/*.class] to resources []
Run Code Online (Sandbox Code Playgroud)

myclient项目的位置模式解析为类路径上的所有资源,但对于myservices,找不到任何资源.

我尝试构建myservices项目JAR并将此JAR放入myclient项目的src/main/webapp/WEB-INF/lib文件夹中.当我这样做时,组件扫描工作.但是对于开发,我不希望每次更改myservices项目时都必须构建和复制JAR.我想组件扫描应该适用于通过POM引用的项目,而不必构建该项目,但经过多次试验后,我无法使其正常工作.

gam*_*son 2

确保在部署程序集中(右键单击您的 Web 项目并选择 myclient 项目的“部署程序集”)将其配置为部署 myservices 项目输出的 jar。如果您使用的是 Maven,则 m2e、m2e-wtp项目配置器应该自动执行此部署程序集设置。

一旦正确配置了部署程序集设置,现在当您使用 Eclispe 服务器适配器发布机制将项目部署到服务器时,所有内容都应该得到部署,并且 myservices jar 将被放置在 myclient 项目的正确位置。

但请确保您安装了最新版本的m2e-wtp。这样,您的 pom.xml 和部署程序集中的配置将得到正确配置。