【问题标题】:How to load a spring context from external library's spring files如何从外部库的 spring 文件中加载 spring 上下文
【发布时间】:2018-07-01 03:27:12
【问题描述】:

我的工作区中有 2 台服务器,它们有一个通用代码。 - 我将它们称为 ServerAServerB 以使其更简单。两台服务器都使用 Spring 和 Maven。 由于通用代码,我决定制作一个名为ServerLib 的库来存储通用代码。 所以现在 ServerLibrary 也像其他两个服务器一样在其src/resources 中包含 spring xml 文件。

在ServerA主方法中,我调用

List<String> springContextFiles = new ArrayList<String (Arrays.asList("spring/common.xml", "spring/serverAOnly.xml"));
context = new ClassPathXmlApplicationContext(springContextFiles.toArray(new String[springContextFiles.size()]));

当公共代码和spring xml文件在ServerA项目中时,这曾经没有任何问题。现在我将它们放在ServerLib 中,它不再起作用并抛出错误java.lang.NoSuchMethodError: org.springframework.beans.support.ResourceEditorRegistrar.<init>(Lorg/springframework/core/io/ResourceLoader;)V

ServerA 和 ServerLib 都有 spring 版本 4.1.6.RELEASE。另外,我尝试将 spring 文件放回 ServerA,但将常见的 java 文件留在 ServerLib 中。它仍然抛出同样的错误。

我正在使用 maven 来注入依赖项,但在这种情况下,ServerLib 只是作为构建路径所需的项目添加到 java 构建路径中。它被正确引用,因为我可以在 Eclipse 的 Maven 依赖项列表中看到本地项目。

任何帮助将不胜感激!提前非常感谢。

注意: ServerA项目中的Spring版本如下。 Maven 依赖树仅在 4.1.6.RELASE 版本中显示 spring

【问题讨论】:

  • 这个错误表明你混合了不同版本的Spring的jar,不要那样做。
  • @M.Deinum 我没有使用不同版本的 Spring。它们都是 4.1.6.RELEASE 版本。
  • 我非常怀疑......它要么是不同类加载器中的不同版本。您在 Maven 中定义该版本的事实可能不会导致您实际使用该版本。使用mvn dependency:tree查看实际使用的版本。
  • @M.Deinum 我刚刚检查了 Eclipse 上的 maven 依赖树,并排除了所有非 4.1.6.RELEASE 的 spring 版本。但是,我仍然遇到同样的问题。我附上了maven依赖树的截图。
  • 这不是mvn dependency:tree 的输出,而是输出的eclipse 解释。只需在命令行上运行即可。

标签: java xml spring eclipse maven


【解决方案1】:

虽然我从 maven 中的库中排除了 spring 依赖项——这就是为什么我的依赖项树是干净的,但它从我的工作区中打开的本地库中引入了旧版本的 spring。关闭这些项目可以消除错误。

【讨论】:

    猜你喜欢
    • 2015-05-04
    • 2015-08-27
    • 1970-01-01
    • 2021-11-24
    • 2017-08-21
    • 1970-01-01
    • 2016-06-18
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多