On 12 Mar 2014, at 8:35 am, Chris Doré <oesoluti...@gmail.com> wrote:

> Hi folks,
> 
> Cache timeouts can be configured via cacheDynamicVersionFor. I'm interested 
> in learning more about how this is implemented, specifically what state 
> information is being used (and where it's stored; local project cache? global 
> cache?) in order to determine when a dynamic version needs to be re-resolved.

For dynamic versions, Gradle does the caching per repository, and the only real 
state it considers is how long since it last checked for versions that match 
the dynamic version in the repository. If that time is greater than the value 
specified for `cacheDynamicVersionsFor` then Gradle goes and checks the 
versions again.

The `—refresh-dependencies` and `—offline` command-line options override this.

In Gradle 1.12, this algorithm will change slightly, so that Gradle will check 
not per dynamic version but instead per module. What this means is that, 
previously, if I had both “mylib:mylib:1.2+” and 
“mylib:mylib:latest.integration” declared as dependencies, then Gradle would 
check the versions once for “mylib:mylib:1.2+” and again for 
“mylib:mylib:latest.integration”. Instead it will now check the versions once 
for “mylib:mylib” and reuse that result for both dynamic version selectors.

The state is stored under ~/.gradle/caches/modules-2/metadata-2.n, so it’s 
global to the machine.

If you want to dig into the code, CachingModuleVersionRepository takes care of 
the decision of what to use from the cache and when.


--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com



Reply via email to