如何排除具有 maven-assembly-plugin 提供的范围的传递依赖项?
How to exclude transitive dependencies with scope provided with maven-assembly-plugin?
我需要创建一个 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-path
、json-smart
、accessors-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 的事情-罐)。
我需要创建一个 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-path
、json-smart
、accessors-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 的事情-罐)。