如何使用maven-assembly-plugin提供的范围排除传递依赖?

时间:2018-04-11 21:03:24

标签: maven maven-assembly-plugin transitive-dependency

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

我想:

  • 包含范围compile的依赖关系,以及传递
  • 的依赖关系
  • 排除范围为provided的依赖项。

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 /这是预期的行为吗?这似乎与其他maven分辨率相矛盾。

2 /什么是允许得到我想要的装配描述符?

由于

1 个答案:

答案 0 :(得分:0)

所以,似乎只是不能使用程序集插件,直到解释为什么不然,我相信这是一个错误:https://issues.apache.org/jira/browse/MASSEMBLY-883

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

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