【发布时间】:2018-07-01 03:27:12
【问题描述】:
我的工作区中有 2 台服务器,它们有一个通用代码。 - 我将它们称为 ServerA 和 ServerB 以使其更简单。两台服务器都使用 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