【问题标题】:How to exclude transitive dependencies with scope provided with maven-assembly-plugin?如何使用 maven-assembly-plugin 提供的范围排除传递依赖项?
【发布时间】:2018-09-21 21:23:16
【问题描述】:

我需要创建一个 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/ 什么是允许得到我想要的东西的程序集描述符?

谢谢

【问题讨论】:

  • 您使用哪个版本的 maven-assembly-plugin?
  • 很抱歉 - 版本 3.1.0,也在主要描述中添加。
  • 根据预定义的描述符,应该没有 jar 提供的范围被打包。你确定它在其他区域不存在...你能显示完整的 pom 文件吗?
  • 我在这里做了一个最小的复制项目:github.com/fanf/test-maven-assembly
  • maven-shade-pluing 似乎符合预期。

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


【解决方案1】:

所以,它似乎只是不适用于程序集插件,直到解释了为什么会这样,我相信这是一个错误: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 的事情)。

【讨论】:

  • 你是否成功使用了shade插件并获得了一个里面有jar而不是class的jar?
  • @Caroh 我没试过,不知道有没有可能,抱歉
猜你喜欢
  • 2011-12-31
  • 2018-07-30
  • 2018-05-19
  • 2016-05-28
  • 2011-02-05
  • 1970-01-01
  • 2015-04-12
  • 2017-01-15
相关资源
最近更新 更多