【问题标题】:Exclude package from being pulled in from an external jar in maven assembly从 Maven 程序集中的外部 jar 中排除包
【发布时间】:2016-04-08 09:38:32
【问题描述】:

我们有一个错误,导致我们的记录器停止执行任何操作。最后,我们追踪到了一个外部依赖,比如:

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

它有自己的 slf4j 实现。我已经更改了我们的 pom,所以首先列出了这个依赖项,这就是触发错误的原因。将依赖项移回最后列出的位置解决了问题(因此使用了通常的 log4j 实现)。

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

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

但是,这不起作用。我能做的最好的事情是:

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

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

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

【问题讨论】:

    标签: maven slf4j


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 不,对不起,我应该更清楚! alice 工件 not 将 slf4j 作为依赖项引入。它包含它自己的自定义实现。因此打开 alice.jar 文件会显示一个 org/slf4j 目录,其中包含 LoggerFactory.class 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2017-08-20
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多