有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我遇到了一个无法启动spring引导服务器的问题,原因与此问题中列出的问题相同:

How to set up Spring Boot and log4j2 properly?

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

我尝试了推荐的解决方案,在elasticsearch项目依赖项定义中实现了所有可能的排除,但出于某种原因,新版本不断被采用。我似乎不能强迫spring boot项目忽略elasticsearch项目使用的日志包

这是我的spring boot项目的pom,请参阅依赖项以了解问题。项目导入: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)

关于如何解决这个问题有什么建议吗?是否可以加载这组库的两个版本,每个模块不知道它们不需要的版本


共 (1) 个答案

  1. # 1 楼答案

    可以通过在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