我正在以编程方式使用Ivy(在SBT的上下文中),我需要能够使用兼容集替换一小组模块,这些模块具有不同的组织,但共享工件名称,修订等 .
举一个具体的例子,我想替换,
org.scala-lang#scala-reflect;2.11.8
用,
org.typelevel#scala-reflect;2.11.8
依赖图中的任何地方 . 请注意,我只想添加对org.typelevel的依赖#scala-reflect; 2.11.8如果依赖于org.scala-lang #scala-reflect; 2.11.8在图中的某处(我不是提前知道),因此无条件地排除org.scala-lang模块并包含org.typelevel模块是不够的 .
这可能吗?如果是的话,非常欢迎指向必要机制的指针 . 如果不是,那么对于变通方法的建议也会非常受欢迎 .
2 回答
虽然这不是最干净的解决方案,但我认为您可以通过劫持项目解析器(负责解决SBT中的项目间依赖关系)来实现这一目标 .
在您的构建文件中的某个位置:
这个新项目解析器可以调整某些依赖描述符,然后针对常规解析器链解决它们......我想 . 您可能必须覆盖一些其他方法 .
这可以使用常 Spring 藤
DependencyDescriptorMediator
来完成 . 以下将执行DefaultModuleDescriptor
类型的module
问题中描述的重写,您可以在SBT here中看到这一点 .