Gradle如何在buildscript块中为SNAPSHOT版本指定cacheResolutionStrategy?

7

我遇到了resolutionStrategy.cacheChangingModulesFor的问题。

我的项目build.gradle类似于这样:

apply plugin: 'base'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply from: "gradle/mixins/cachestrategy.gradle"
configurations.all {
  resolutionStrategy.cacheDynamicVersionsFor 5, 'minutes'
  resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

buildscript {
  repositories {
    maven {
      url artifactoryUrl
    }
  }
  dependencies {
    classpath (group: 'com.myorg', name: 'aCustomPlugin', version: '1.5.0-SNAPSHOT') {
      changing = true
    }
  }
}

allprojects {
  apply plugin: 'base'
  apply plugin: 'com.myorg.aCustomPlugin'
}

我的问题是:如何在buildscript块中指定SNAPSHOT版本的cacheResolutionStrategy?
1个回答

12

在代码块之外指定它是无效的(因为buildscript块首先执行以构建脚本...),所以脚本中定义的缓存策略规则尚未被评估。

因此,解决方案应该像这样放置在buildscript块中。

buildscript {
  repositories {
    mavenLocal()
    maven {
      url artifactoryUrl
    }
  }
  dependencies {
    classpath (group: 'com.myorg', name: 'aCustomPlugin', version: '1.5.0-SNAPSHOT') {
      changing = true
    }
  }
  configurations.all {
    resolutionStrategy.cacheDynamicVersionsFor 5, 'minutes'
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
  }
}

2
顺便提一下,如果使用Maven仓库,SNAPSHOT 版本默认会被视为“可变”的。因此,无需显式设置 changing=true - Marcin Zajączkowski
非常肯定那是因為當時我們使用的版本 gradle 存在漏洞所致。現在,它已經不再需要了! :) - wrossmck
2
你能解释一下 cacheDynamicVersionsFor 和 cacheChangingModulesFor 之间的区别吗? - jatin Goyal
1
为了给后来人参考,"changing modules" 指的是 SNAPSHOT 版本和任何明确标记为 changing 的依赖项。动态版本的一个例子是 2.+,它将解析为可用的最新的 2.x 版本。 - Blake M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接