有没有办法用文件系统中的另一个替换Gradle依赖关系?

时间:2019-11-18 15:44:25

标签: gradle build.gradle

我在受限环境中有一个旧项目。我们发现了第三方OSS库的问题,已对其进行分叉并修复。但是,该另一种工具期望工件的路径已经精确编码(因为它已被硬编码到工件中)(它还期望它作为依赖项位于类路径上)。因此,dependencies看起来像这样:

dependencies {
    compile group: 'org.foo', name: 'bar', version: '1.2.3', configuration: 'runtime'
}

org.foo:bar:1.2.3是我们需要修补的工件。

是否有可能在保持其工件坐标不变的情况下覆盖此依赖关系,但向其添加类似files的内容?如果是这样,怎么办?可以使用模块替换来完成吗?

我们使用的是Gradle的旧版本-4.10.x。

1 个答案:

答案 0 :(得分:3)

将修补程序贡献给OSS库是您的最终目标,但您可以通过以下方式解决此问题:

  • 假设Maven POM:m
  • 将修补后的文件及其匹配的元数据文件添加到<root>/org/foo/bar/1.2.3/bar-1.2.3.jar下的本地存储库中。
  • 在构建中的其他存储库之前 定义此存储库

    <root>/org/foo/bar/1.2.3/bar-1.2.3.pom
  • 当Gradle解决此依赖关系时,它将从本地存储库中选择一个,因为它具有元数据并尊重存储库的布局。
    • 这可能需要运行repositories { maven { name = "localRepo" url = "<root>" } // Other repositories below } 才能使Gradle注意到更改的依赖性。

注意:在旧版/受限环境之外,我建议这样做。您实际上在给定上下文中遮盖了工件,从而使构建变得脆弱。