尝试在Spring Boot APP中使用最新版本的Log4J2 2.10版。
我们是微服务解决方案,因此首先创建一个可重复使用的模块,其中包含下面提到的细节 -
可重用日志组件(POM片段如下) -
<log4j.version>2.10.0</log4j.version>
<commons-logging.version>1.2</commons-logging.version>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${commons-logging.version}</version>
</dependency>
然后,microService项目将其称为 -
<log4j.version>2.10.0</log4j.version>
<commons-logging.version>1.2</commons-logging.version>
<dependency>
<groupId>a.b.c</groupId>
<artifactId>reusable-logger-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
无论将jar版本覆盖到2.10.0,都会显示2.7.0 -
我的工作是将下面的jar包含在MicroService的POM文件中
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>a.b.c</groupId>
<artifactId>reusable-logger-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
问题2)有没有人遇到类似问题?
答案 0 :(得分:0)
在你的microService模块中,spring-boot-starter请求版本2.7,但是你的reusable-logger-starter请求了2.10.0。 Maven决定2.10。
请参阅Interpreting "omitted for conflict" in maven 2 dependency tree
对问题2的简单回答是:是的,人们已经面临这种行为。
您应该问的是如何解决这个问题,请阅读Maven BOMs以获取指导。
答案 1 :(得分:0)
解决方案是在微服务的POM中包含/覆盖log4j2的版本 -
Request method 'GET' not supported
依赖关系中介 - 确定在遇到多个版本的工件时将使用哪个版本的依赖关系。目前,Maven 2.0仅支持使用&#34;最近的定义&#34;这意味着它将在依赖树中使用与项目最接近的依赖项的版本。您可以通过在项目的POM中明确声明版本来保证版本。请注意,如果两个依赖项版本在依赖关系树中处于相同的深度,则直到Maven 2.0.8没有定义哪一个会赢,但是从Maven 2.0.9开始,它在声明中的顺序是:第一次宣言获胜。 &#34;最近的定义&#34;意味着所使用的版本将是依赖关系树中与项目最接近的版本,例如。如果A,B和C的依赖关系被定义为A - >; B - &gt; C - &gt; D 2.0和A - &gt; E - &gt; D 1.0,然后在构建A时将使用D 1.0,因为从A到D到E的路径更短。您可以在A中向D 2.0显式添加依赖项以强制使用D 2.0