如何减去常春藤依赖集

我的目标是将项目传递依赖关系划分为几个不交叉的集合:

  • system(已经存在于j2ee容器中的jar;使用显式固定版本手动列出)
  • 提供(将jar复制到j2ee容器;手动列出)
  • 耳朵(jar子里面装有jar子,其余的)

我目前列出的解决方案有一些缺点:

  • 必须逐个从耳塞中排除系统和提供的库
  • 尚未明确排除的新的第三方传递deps可能会不小心听到
  • 有时必须添加显式override重复库名称和版本

是否有一些方法可以消除这些缺点?

能够以某种方式定义一个conf作为其他人的依赖集减法(具有优雅的冲突解决方案)的结果将是很好的: ear = runtime – system – provided

当IVY-982得到修复时,可能支持表示法。

寻找适用的实际解决方案。

如果有解决方案,甚至愿意考虑改用gradle。

    @;runtime->@;system->master;provided->runtime;ear->runtime;test->test(default)">                       <!---->         

可以在IVY-1443附件中找到要试验的示例项目源。

虽然提供依赖关系可以使用Maven和Gradle排除,但似乎目前没有办法轻松实现常春藤。

更新

在某些情况下,任务可以使用中间诱导模块和负正则表达式掩码:

     

但是我们已经搬到了Gradle,因为Ivy似乎失去了动力。