我的问题是,如何强制捆绑包使用与其一起打包的Spring版本,而不是ESB上安装的版本?
我有一个简单的Web服务WAR,我正在尝试在Fuse ESB中安装和启动。 WAR 依赖于 Spring 3.0.6,我在 ESB 中安装了 Spring 3.0.5 功能。 安装并尝试启动捆绑包后,我收到以下错误。
22:24:43,869 |错误 |l 控制台线程 |注册网络应用访客WC |163 - org.ops4j.pax.web.pax-web-extender-war - 1.0.3 |注册异常。跳。org.springframework.beans.factory.parsing.BeanDefinitionParsingException: 配置问题:无法从 URL 位置导入 Bean 定义 [classpath:META-INF/spring/app-context.xml]违规资源:ServletContext resource [/WEB-INF/cxf-servlet.xml];嵌套异常是 org.springframework.beans.factory.BeanDefinitionStoreException:从类路径资源 [META-INF/spring/app-context.xml] 解析 XML 文档的意外异常;嵌套异常是 org.springframework.beans.FatalBeanException: 命名空间 [http://www.springframework.org/schema/jdbc] 的类 [org.springframework.jdbc.config.JdbcNamespaceHandler] 没有实现 [org.springframework.beans.factory.xml.NamespaceHandler] 接口 at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68([73:org.springframework.beans:3.0.5.RELEASE]
这表明正在使用一个意想不到的 Spring 版本。 我可以看到 3.0.6 在捆绑类路径上。我本以为捆绑包应该只使用捆绑库文件夹中的 Spring 版本。
我也有这个pom配置,以便在将WAR部署到ServiceMix时,Maven依赖项包含在类路径上。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<classpathLayoutType>repository</classpathLayoutType>
</manifest>
</archive>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
<webResources>
<resource>
<directory>src/main/resources</directory>
<targetPath>WEB-INF</targetPath>
<includes>
<include>**.*</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
bundle 类路径由 MANIFEST.MF
中的 Import-Packages 定义,而不是/lib 文件夹。您可能需要将Maven-Bundle-Plugin配置为使用Spring 3.0.6。