2

我有一个多模块 Maven 应用程序,有两个子模块。一个模块用于 Web 服务,另一个是使用这些服务的模拟器。

我有一个奇怪的问题,当我想部署我昨天开始的应用程序时,Tomcat7 出现以下错误:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate NamespaceHandler for namespace [http://www.springframework.org/schema/context]
Offending resource: ServletContext resource [/WEB-INF/application-context.xml]

我的 application-context.xmls 顶部看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<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"
       xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <context:component-scan base-package="com.company">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

它说它找不到弹簧上下文的命名空间处理程序。但是我在我的父 pom.xml 中有这样的依赖项:

 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

我还可以看到 Tomcat 中的 Web 应用程序在应用程序的 lib 文件夹中也有 spring-context jar。我已经在谷歌上搜索了两个小时,所以任何帮助将不胜感激。

谢谢

4

2 回答 2

1

看一下maven-shade-plugin文档的这一部分,它明确地讨论了 Spring 命名空间处理程序。

于 2012-08-17T13:33:24.287 回答
0

我在我的 pom.xml 上发现了错误,我正在为自己写下来,以备将来我可能会再次遇到:)

我有这样的 pom.xml

       <dependency>
            <groupId>org.jvnet.jax-ws-commons.spring</groupId>
            <artifactId>jaxws-spring</artifactId>
            <version>1.8</version>
        </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springFrameworkVersion}</version>
    </dependency>

因此,jaxws-spring 已经依赖于 Spring 2.0。这使得 maven 也将 jar spring-2.0 放到了战争中。所以我遇到了某种图书馆冲突。

当我像下面这样排除时,问题解决了:

<dependency>
            <groupId>org.jvnet.jax-ws-commons.spring</groupId>
            <artifactId>jaxws-spring</artifactId>
            <version>1.8</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
于 2013-08-12T11:47:16.667 回答