如何避免在阴影jar中发生隐式依赖冲突?

时间:2019-07-16 20:46:18

标签: maven-shade-plugin

我有一个包含多个模块(B),(C),(D)的项目(A)。模块B取决于C,而模块C取决于D。

模块D具有外部依赖性,例如

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

模块D构建良好。

如上所述,模块C依赖于模块D,并且该构建开始抱怨slf4j-api类与模块D中的类重叠。

[WARNING] slf4j-api-1.7.26.jar, module-d-0.1.0.jar define 34 overlapping classes:
[WARNING]   - org.slf4j.helpers.SubstituteLogger
[WARNING]   - org.slf4j.helpers.NamedLoggerBase
...

我不太了解这里发生了什么。 slf4j-api-1.7.26.jar被拉入C,因为它是D的列出依赖项,但是D已经拥有它,那么为什么还要尝试再次将其拉入?

好的,所以我经历了从D的阴影插件中排除slf4j的麻烦

                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                    <minimizeJar>true</minimizeJar>
                    <artifactSet>
                        <excludes>org.slf4j:*</excludes>
                    </artifactSet>
                </configuration>

,这可以暂时解决问题。它不包含在D中,因此当我构建C时,没有关于重复的警告。但是当我去构建依赖于C的B时,突然出现了重叠的类警告,因为C打包了slf4j-即使它没有明确的依赖。

我不想从堆栈的每个模块中排除依赖项-似乎应该足够聪明,知道它已经被提供了(不要尝试再次打包),或者没有提供(在这种情况下,只需提供一次即可)。

感觉我只是在配置一些错误,但是我还没有找到一个好的答案。

0 个答案:

没有答案