【问题标题】:How to manually download file from Maven repository in Gradle如何从 Gradle 中的 Maven 存储库手动下载文件
【发布时间】:2021-06-08 06:09:26
【问题描述】:

我们有一个庞大的单体应用程序,它由多种工具(shell 脚本、Ant 和 Maven)构建。构建过程相当复杂:

  • 很多手动步骤
  • Ant 目标之间的隐藏依赖关系
  • 必须根据使用的操作系统执行不同的步骤

我们决定通过创建包装所有这些逻辑的 Gradle 脚本来简化它(修复它是完全不可能的,所以我们创建了一个包装器来标准化执行所有逻辑的方式)。我们必须从 Maven 存储库中下载一些文件,但我们不能使用 dependencies 语法:

  • 我们不需要总是下载所有文件
  • 下载的工件的版本是动态的(取决于位于完全不同位置的配置)
  • 我们需要下载文件的路径(例如,我们必须解压缩以 zip 形式分发的工件)

我们如何实现它?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    实现它的最简单方法是创建具有依赖关系的动态配置,然后解决它。 resolve 方法返回本地磁盘上依赖项的路径。为每个配置使用唯一的名称很重要。否则,执行两次逻辑会失败(不能用XYZ 名称覆盖配置)。

    这是一个返回工件路径的示例方法。如果工件已经在 Gradle 缓存中可用,则不会第二次下载,但当然会返回路径。在此示例中,所有工件都是从 Maven Central 下载的。

    方法:

    ext.resolveArtifact = { CharSequence identifier ->
        def configurationName = "resolveArtifact-${UUID.randomUUID()}"
        return rootProject.with {
            configurations.create(configurationName)
            dependencies.add(configurationName, identifier)
            return configurations.getByName(configurationName, {
                repositories {
                    mavenCentral()
                }
            }).resolve()[0]
        }
    }
    

    用法:

    def jaCoCoZip = resolveArtifact('org.jacoco:jacoco:0.8.6')
    def jaCoCoAgent = resolveArtifact('org.jacoco:org.jacoco.agent:0.8.6')
    

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      相关资源
      最近更新 更多