繁体   English   中英

强制maven spring boot项目使用旧版本的依赖项而不是其他依赖项的新版本

[英]Forcing maven spring boot project to use older version of a dependency instead of a new version from another dependency

由于此问题中列出的问题相同,我遇到了无法启动Spring启动服务器的问题:

如何正确设置Spring Boot和log4j2?

我遇到这种情况是因为spring boot项目依赖于包含elasticsearch的jar,其中包括与spring boot不兼容的新版本的slf4j

我通过在elasticsearch项目依赖项定义中实现每个排除项来尝试推荐的解决方案,但由于某种原因,新版本仍然被选中。 我似乎无法强制spring boot项目忽略elasticsearch项目使用的日志包。

这是我的spring-boot项目的pom,请参阅problematic.project.import的依赖项: http//pastebin.com/Yeq2qk9Y

这是导入春季启动项目的项目的pom: http//pastebin.com/gknmf6Tt

我得到的错误是:

Caused by: java.lang.NoSuchMethodError: org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(Lorg/apache/logging/log4j/core/config/ConfigurationSource;)Lorg/apache/logging/log4j/core/config/Configuration;
at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.loadConfiguration(Log4J2LoggingSystem.java:165)
at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.loadDefaults(Log4J2LoggingSystem.java:148)
at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:75)
at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:50)

有关如何解决此问题的任何提示已被清除? 这个库的两个版本是否可以加载,每个模块都不知道他们不需要的版本?

您可以使用pom.xml<exclusions>标记排除循环依赖项,如下所示:

<dependency>
  <groupId>sample.ProjectB</groupId>
  <artifactId>Project-B</artifactId>
  <version>1.0-SNAPSHOT</version>
  <exclusions>
    <exclusion>
      <groupId>sample.ProjectE</groupId> <!-- Exclude Project-E from Project-B -->
      <artifactId>Project-E</artifactId>
    </exclusion>
  </exclusions>
</dependency>

您应该从具有它的依赖项中排除较新版本的循环依赖性,这样只会加载旧版本而不是两者。

以下是获取更多信息的链接:

https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM