如何使用maven assembly插件提供的作用域排除可传递依赖项?

如何使用maven assembly插件提供的作用域排除可传递依赖项?,maven,maven-assembly-plugin,transitive-dependency,Maven,Maven Assembly Plugin,Transitive Dependency,我需要创建一个带有依赖项的jar。我正在使用maven assemply插件3.1.0 我想: 包括范围compile的依赖项 排除提供了范围的依赖项 即,在以下情况下,如mvn依赖项: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:accesso

我需要创建一个带有依赖项的jar。我正在使用maven assemply插件3.1.0

我想:

  • 包括范围
    compile
    的依赖项
  • 排除提供了范围
    的依赖项
即,在以下情况下,如
mvn依赖项: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路径中包含
json-smart
accessors-smart
,但不包括
slf4j-api

使用带有依赖项的默认
jar
描述符,我还将
slf4japi
包含在结果jar中

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

2/什么是允许获取所需内容的程序集描述符


感谢

因此,它似乎无法与汇编插件配合使用,在解释了为什么它不起作用之前,我认为这是一个bug:

我在这里创建了一个最小的项目来演示这个问题:


解决方案是使用shade插件(),它正确地排除了提供了作用域
的可传递依赖项(并且可以做比有关uber-jar的
assembly
插件更多的事情)

您使用哪个版本的maven assembly plugin?oups抱歉-版本3.1.0,也添加在主说明中。根据预定义的描述符,应该没有打包提供的jar范围。你确定这在其他地区不存在吗…你能显示完整的pom文件吗?我在这里做了一个最小的复制项目:maven shade pluing似乎做了预期的事情。你成功地使用了shade插件并获得了一个内部包含jar而非类的jar吗?@Caroh我没有尝试,我不知道这是否可能,抱歉