排除包装从maven组件中的外部罐中拉出

时间:2016-04-08 09:38:33

标签: maven slf4j

我们有一个错误,我们的记录器停止做任何事情。最后,我们将其追溯到外部依赖,例如:

    <dependency>
        <groupId>com.bob</groupId>
        <artifactId>alice</artifactId>
        <version>1.2.3</version>
    </dependency>

它拥有自己的slf4j实现。我已经改变了我们的pom,所以首先列出了这个依赖项,这就是触发bug的原因。将依赖项移回到最后列出的问题修复了问题(以便使用通常的log4j实现)。

这似乎是一个非常脆弱的修复。 &#34;正确&#34;修复似乎是让maven程序集插件排除从alice.jar文件导入org.slf4j包中的任何文件。我们尝试在自定义程序集xml文件中添加一些内容,例如:

<dependencySets>
    <dependencySet>
        <unpack>true</unpack>
        <unpackOptions>
            <excludes>
               <exclude>com.bob:alice:org/slf4j/*</exclude>

然而,这并没有奏效。我能做的最好的是:

               <exclude>org/slf4j/*</exclude>

但这不包括该软件包的所有副本,这显然会破坏所有内容。

进行此排除的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

试试这个:

<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>

然后像这样添加依赖项slf4j :(您可以修改slf4j的版本)

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.5.6</version>
</dependency>