7

我正在开发一个跨两个 Eclipse 项目(myclient 和 myservice)的 GWT Web 应用程序。

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

<dependency>
<groupId>com.myproject</groupId>
<artifactId>myservices</artifactId>
<version>1.0.0</version>
</dependency>

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"/>

和 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>

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

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

org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved location pattern [classpath*:com/myproject/myservices/**/*.class] to resources []

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

我尝试构建 myservices 项目 JAR 并将这个 JAR 放入 myclient 项目的 src/main/webapp/WEB-INF/lib 文件夹中。当我这样做时,组件扫描工作。但是对于开发,我不想每次对 myservices 项目进行更改时都必须构建和复制 JAR。我想组件扫描应该在通过 POM 引用的项目上工作,而不必构建该项目,但经过大量试验,我无法让它工作。

4

6 回答 6

2

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

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

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

于 2013-02-27T06:02:30.687 回答
2

尝试将您的 application-context.xml 拆分为 2 个单独的文件:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:service-context.xml,classpath:client-context.xml</param-value>
</context-param>

myservices/src/main/resources/service-context.xml:

<context:component-scan base-package="com.myproject.myservices"/>

myclient/src/main/resources/client-context.xml:

<context:component-scan base-package="com.myproject.myclient"/>
于 2013-02-28T16:30:14.213 回答
1

请检查以下事项:

  1. 您的服务项目是“仅”作为 jar 存在还是整个项目都可以通过工作区解析获得。这可以通过 maven-context-menue (禁用/启用 Workspaceresolution)进行检查
  2. src/main/webapp下的webapp的布局还可以。但是我是否正确地认为所有课程都复制在那里?如果是这样,您应该确保所有内容都在目标目录下。所以请检查一个maven调用“clean package”是否在目标文件夹下生成了一个webappstructure,并且所有需要的库(例如myservice)都存在于target\$your-webarchivename\WEB-INF\lib下
    1. 检查 myservice pom.xml 中的包装是否设置为 jar(你可能有这个,对吧?)
于 2013-03-04T11:50:57.047 回答
1

很明显,您的服务 jar 不包含在您的客户端项目的构建路径中。这是唯一的根本原因。

确保3点:

  1. 您已在具有正确 pom.xml 的服务项目下运行mvn clean install 。
  2. 您已在客户端项目下运行mvn eclipse:eclipse 。这将拉出你所有的依赖项目。
  3. 检查您的客户端 Eclipse 项目的构建路径对话框。列表中有您的服务 jar 吗?确保这
于 2013-03-05T12:23:13.760 回答
1

尝试这个 :

<context:component-scan base-package="com.myproject"/>
于 2013-02-27T10:37:35.853 回答
0

你最好看看这个教程 http://fusesource.com/docs/framework/2.2/deploy_guide/CXFServletDeploySpring.html

于 2013-03-04T03:14:48.940 回答