排除从maven程序集中的外部jar拉入的包
我们有一个错误,我们的记录器停止做任何事情。最后,我们找到了一个外部依赖项,比如:排除从maven程序集中的外部jar拉入的包,maven,slf4j,Maven,Slf4j,我们有一个错误,我们的记录器停止做任何事情。最后,我们找到了一个外部依赖项,比如: <dependency> <groupId>com.bob</groupId> <artifactId>alice</artifactId> <version>1.2.3</version> </dependency> com.bob 爱丽丝 1.2.
<dependency>
<groupId>com.bob</groupId>
<artifactId>alice</artifactId>
<version>1.2.3</version>
</dependency>
com.bob
爱丽丝
1.2.3
它有自己的slf4j实现。我已经更改了pom,所以首先列出了这个依赖项,这就是引发错误的原因。将依赖项移回上次列出的位置修复了这个问题(因此使用了通常的log4j实现)
这似乎是一个非常脆弱的解决方案。“正确”的修复方法似乎是让maven assembly插件排除从alice.jar文件导入org.slf4j包中的任何文件。我们尝试向自定义程序集xml文件中添加一些内容,如:
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<unpackOptions>
<excludes>
<exclude>com.bob:alice:org/slf4j/*</exclude>
真的
com.bob:alice:org/slf4j/*
然而,这不起作用。我所能做的就是:
<exclude>org/slf4j/*</exclude>
org/slf4j/*
但这排除了该软件包的所有副本,这显然破坏了一切
正确的排除方法是什么?试试以下方法:
<dependency>
<groupId>com.bob</groupId>
<artifactId>alice</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
试试这个:
<dependency>
<groupId>com.bob</groupId>
<artifactId>alice</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
不,对不起,我应该说清楚一点!alice工件不作为依赖项拉入slf4j。它包含自己的自定义实现。所以打开alice.jar文件会显示一个org/slf4j目录,其中有一个LoggerFactory.class等等。不,对不起,我应该更清楚一些!alice工件不作为依赖项拉入slf4j。它包含自己的自定义实现。因此打开alice.jar文件将显示一个org/slf4j目录,其中包含LoggerFactory.class等。