如何排除具有 maven-assembly-plugin 提供的范围的传递依赖项?

How to exclude transitive dependencies with scope provided with maven-assembly-plugin?

我需要创建一个 jar-with-dependencies。我正在使用 maven assemply 插件 3.1.0。

我想:

IE,如下例mvn dependency:tree所示:

[INFO] +- com.jayway.jsonpath:json-path:jar:2.2.0:compile
[INFO] |  +- net.minidev:json-smart:jar:2.2.1:compile
[INFO] |  |  \- net.minidev:accessors-smart:jar:1.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.16:provided

我想在最终的 jar 中包含 json-pathjson-smartaccessors-smart 但不是 slf4j-api.

使用默认的 jar-with-dependencies 描述符,我还在生成的 jar 中包含 slf4j-api

1/ 这是预期的行为吗?这似乎与其他行家决议相矛盾。

2/ 什么是可以得到我想要的程序集描述符?

谢谢

因此,它似乎无法与程序集插件一起使用,直到解释了为什么会这样,我认为这是一个错误:https://issues.apache.org/jira/browse/MASSEMBLY-883

我创建了一个最小的项目来演示这里的问题:https://github.com/fanf/test-maven-assembly

解决方案是使用 shade 插件 (https://maven.apache.org/plugins/maven-shade-plugin),它正确地排除了范围为 provided 的传递依赖(并且可以比 assembly 插件做更多关于 uber 的事情-罐)。