java - 强制 maven spring boot 项目使用旧版本的依赖项,而不是另一个依赖项的新版本

标签 java maven spring-boot log4j log4j2

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

How to set up Spring Boot and log4j2 properly?

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

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

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

以下是正在导入到 Spring Boot 项目中的项目的 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)

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

最佳答案

您可以使用<exclusions>排除循环依赖关系。标签在你的 pom.xml像这样:

<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

关于java - 强制 maven spring boot 项目使用旧版本的依赖项,而不是另一个依赖项的新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41493403/

相关文章:

java - camunda 部署 rest API 错误 - 无法处理多部分/表单数据

java - 无法加载 netezza JDBC 驱动程序

java - 使用 jCommander 的 SpringBoot CLI 属性

java - 只要 ServerSocket 空闲,Linux 上的 Tomcat6 就会使用 100% 的 CPU

java - 如何更好地处理耗时/CPU 密集型查询?

java - 将bean xml转换为spring boot注释

java - 使用 Palantir Gradle 插件构建 Docker 容器时找不到 .jar 文件

java相当于swfobject

java - maven tomcat部署soap web服务错误

java - Spring 启动: Reading data using Spring Data JPA returns incorrect values