排除从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等。