Gradle re-execute tasks due to alleged JAR dependency change

Occasionally Gradle claims that (some, but the same) binary JARs in local cache has changed and re-execute related tasks:

Executing task ':tests:test:compileJava' (up-to-date check took 0.005 secs) due to:
  Input property 'classpath' file /home/foo/.gradle/caches/modules-2/files-2.1/org.springframework/spring-aop/4.2.6.RELEASE/5efbfccb19efda2956b8977561bf4da6b15b0d0e/spring-aop-4.2.6.RELEASE.jar has changed.
  Input property 'classpath' file /home/foo/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/4.2.6.RELEASE/d4a319fb4d949fb6313f45c929947b9b4e26283e/spring-beans-4.2.6.RELEASE.jar has changed.
  Input property 'classpath' file /home/foo/.gradle/caches/modules-2/files-2.1/org.springframework/spring-expression/4.2.6.RELEASE/c0182d73f348ab11d51d45cbe29f3820c32d0ccc/spring-expression-4.2.6.RELEASE.jar has changed.

The mentioned files have the same MD5 checksum and seems to remain the same modify/change date (back in 2016). No changes in Gradle configuration is done. Tested with Gradle 4.0 on Fedora 25.

What could be a reason?

Hi Marcin,

my guess would be that the order of the files on the compile classpath changes. How are you creating the compile classpath? Could you perhaps share build scans for two builds which show the classpath changes? An other option would be to provide an example project for how to reproduce the issue.
I would look out for HashSets/HashMaps in your build scripts.

Cheers,
Stefan

Stefan, that module has dozens dependencies, but all seem to be added with:

dependencies { 
    compile project("...")
    compile lib.junit
    ...
}

where lib is just a list defined as:

ext.lib = [
        junit: 'junit:junit:4.12'
        ....
]

It just to reduce duplication in the configuration and it should not be a problem.

I wonder why it would be something with the order. The message seems to suggest that binary jar has changed. And it just 3 dependencies (out of dozens for that module).

Build scan is problematic to achieve. Maybe you have some other idea how could I tack it down locally?

Hi Marcin,

in order to debug that further, could you please add the following snippet to the project which has the problem:

compileJava {
    doFirst {
        classpath.files.findAll { it.name.endsWith('.jar') }.each {
            println it.absolutePath
        }
    }
}

This should print out the paths for all files on the classpath. When you see the problem reappearing again please diff this path.
Regarding the modified message: The classpath is order sensitive. So when the classpath changes from A.jar B.jar C.jar to B.jar A.jar C.jar then this is detected as a change. Gradle does not try to be smart about it, so it would report that A.jar changed to B.jar and B.jar changed to A.jar. Note that paths and filenames do not matter for jars on the classpath, so Gradle can not use this information for matching up the two classpaths and create a smarter diff.

Cheers,
Stefan

Hello again Stefan. Sorry for delay, I’ve been got into some other things last week.

You were right. The JAR order changes. I got through the code, but I haven’t found any usage of collections with not determined order. The changes are subtle and only a subset of JARs has different order. Looking at the dependency graph they are transitive dependencies of different artifacts and I don’t know if it is a good track.

The changes are “stable” and in a subsequent cache executions they seem to be covered. Nevertheless, it would be good to have it explained. Do you have any other ideas what could be a reason or how to find offending place?

Hi Marcin,

I have quite an amount of questions which could steer us into the right direction:

  • Does your build configure conflict resolution or force some versions?
  • Can you create a project with only the dependencies which could be used to reproduce the issue?
  • Are you using multiple remote repositories (which could contain different artifact metadata)?
  • What plugins are you using?
  • Do you use them plugins for dependency management?

If you read dependencies from a directory, then this could also be a source of non-determinism of the dependency order. You may try to run the build with --no-daemon, so the problem appears more often.

Cheers,
Stefan

Does your build configure conflict resolution or force some versions?

Yes, both.

Can you create a project with only the dependencies which could be used to reproduce the issue?

There is a lot of dependencies, including some in-house libraries. I would prefer to avoid that, but that’s probably possible to reproduce.

Are you using multiple remote repositories (which could contain different artifact metadata)?

Yes. And I have a question here. One library refers to a old version of some other library which is not longer accessible. As a (failed) result there is a try to download metadata in every single build, but in the end it’s not a problem as that version is overridden by a newer version from some other dependency.

What plugins are you using?

        classpath 'org.hibernate.build.gradle:gradle-upload-auth-plugin:1.1.1'
        classpath 'org.mozilla:rhino:1.7R4'
        classpath 'com.eriwen:gradle-js-plugin:1.12.0'
        classpath 'com.eriwen:gradle-css-plugin:1.11.1'
        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
        classpath 'net.saliman:gradle-cobertura-plugin:2.2.7'
        classpath 'com.ofg:uptodate-gradle-plugin:1.6.3'
        classpath 'org.ajoberstar:gradle-git:0.12.0'
        classpath 'com.blogspot.toomuchcoding:gradle-test-profiler:0.2.2'
        classpath 'se.transmode.gradle:gradle-docker:1.2'
        classpath 'io.codearte.accurest:accurest-gradle-plugin:1.1.0'
        classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.2'
        classpath 'com.bmuschko:gradle-docker-plugin:3.0.3'
        classpath 'com.github.docker-java:docker-java:3.0.1'
        classpath 'com.ofg:gradle-docker-plugin:1.0.11.5'

Do you use them plugins for dependency management?

No directly, but I’ve seen dependency-management-plugin in one of dependent libraries.

Hi Marcin,

and another question: Do you know what part of the classpath changes?

Cheers,
Stefan

Do you know what part of the classpath changes?

What do you exactly mean? I see what JARs are in the wrong order. In one particular case (in different modules there are different JARs changes - however, it is a small set) there is:

  • domain depends on jersey-test-framework-provider-inmemory-2.15.jar - which has classes reported as UP-TO-DATE (local build without build cache)
  • be depends on domain and reports:
jersey-test-framework-provider-inmemory-2.15.jar
jersey-test-framework-core-2.15.jar
drools-1.61.01.jar

to be changed (and in fact there is some disorder with them on printed classpath).

@CedricChampeau Does this ring any bells? Could we be resolving dependencies in a configuration in slightly different orders sometimes? Maybe if it’s through a project dependency?

@Stefan_Wolf Will it be any easier to see this difference in 4.1?

And @Marcin could you share the dependencies report for be and domain? Maybe there’s something special with that combination of dependencies.

It won’t be easier to spot the difference in Gradle 4.1. Having a dependency report of the project under question (probably partially anonymized) would help a lot.

@sterling @Stefan_Wolf Sorry for being reluctant to generate that list, but it would be problematic for me to prepare it in a proper form and in fact I am skeptical that it will be useful (it’s just hundreds of open source libs and some internal stuff). Therefore, as an alternative, I analyzed the outputs and I have found some interesting corelation.

The builds are they are identical (omitting negligibly different task time executions) up until one place:

Selected primary task 'theTaskICall' from project :
Creating new cache for metadata-2.23/module-versions, path /home/foo/.gradle/caches/modules-2/metadata-2.23/module-versions.bin, access org.gradle.cache.internal.DefaultCacheAccess@74ba7c0f
Creating new cache for annotation-processors, path /home/foo/my-project/.gradle/4.0.1/fileContent/annotation-processors.bin, access org.gradle.cache.internal.DefaultCacheAccess@31854e8a

In a subsequent build which triggers task execution (by having different classpath) the order of caches creation is reversed:

Selected primary task 'theTaskICall' from project :
Creating new cache for annotation-processors, path /home/foo/my-project/.gradle/4.0.1/fileContent/annotation-processors.bin, access org.gradle.cache.internal.DefaultCacheAccess@57ee440b
Creating new cache for metadata-2.23/module-versions, path /home/foo/.gradle/caches/modules-2/metadata-2.23/module-versions.bin, access org.gradle.cache.internal.DefaultCacheAccess@53eb01e3

I run several builds one by one to confirm that and only if the order has changed since the last execution the tasks were considered not up-to-date. I could have 6 executions in the same order in a row (one variant), a change (causing a task re-execution) and another few builds in the 2nd variant (without task re-execution).

It allows me to suspect that there could be some race in Gradle and the order of cache creation implies different classpath order (at least in some kind of builds). WDYT?

Btw, the build was executed without build cache enabled and with sequential task order (without the --parallel flag).

@sterling @Stefan_Wolf Hi, do you know what can cause that?

@denis1 We currently do not know what is causing this. Are you suffering from the same problem?
As soon as we would have a reproducer project we would be in a much better place to find the root cause.

We are from the same company, I wanted to know if that discovery helped you somehow.

I have a problem like this too with android studio.

Now I realized the difference in classpath between AndroidStudio3 and console invocation of a task:

Android Studio takes some jars from “.gradle/caches/jars-3/” where as console takes everything from “.gradle/caches/modules-2”,

Console:

:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle/3.0.1/cfa107d4db0c11c11f445a11e768adf61c72ce06/gradle-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-gradle-plugin/1.1.60/dc7acce581312f418c1ad55932ab770da61e205d/kotlin-gradle-plugin-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle-core/3.0.1/c2945119335b491ca56e4042f7c8c55dccf5c9c2/gradle-core-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-gradle-plugin-api/1.1.60/97a69272b6dc47f9ca1f523859e4819a1c61cb39/kotlin-gradle-plugin-api-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-annotation-processing-gradle/1.1.60/8f2d3fef4c0d7ecfc85fa51744153f399cdeb3a2/kotlin-annotation-processing-gradle-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-android-extensions/1.1.60/3b6a750e48ac6a4ca5f0fba633385825610dce3e/kotlin-android-extensions-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-runner/1.1.60/d2586f88979235b4b102348c431d888bdd2cf63f/kotlin-compiler-runner-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embeddable/1.1.60/e0ea7c24d46acc433ece025023868bf9ffe5e437/kotlin-compiler-embeddable-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/builder/3.0.1/1f896967507729bb35ac727c03d3b9306fe87b7d/builder-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.lint/lint/26.0.1/541bfb082a95a3b55d0158d69b067f1d7c623122/lint-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.lint/lint-checks/26.0.1/a5df32c64598e190808accaa03820fb9db9f8201/lint-checks-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.lint/lint-api/26.0.1/2d4dd9f4676fbb152e4baf6f6f4cbbb868521832/lint-api-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/manifest-merger/26.0.1/700cbb1ed4066f48d4970f5669c44a51bd03142/manifest-merger-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools/sdk-common/26.0.1/9ddd2fa552e7b49548c421c0be4e65dc9a245f69/sdk-common-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools/sdklib/26.0.1/bdb4723f8e3791f1d3911b1f191acf25840f352a/sdklib-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools/repository/26.0.1/bc0dfe02af8d075f6b7ad63a202ed4c63a6a647d/repository-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.1.60/af5cabae2d352850b076213f358dc2150b14a812/kotlin-reflect-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.60/ac63d0e86e690fe4eded7f1f8998996c28499989/kotlin-stdlib-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.external.org-jetbrains/uast/26.0.1/663906c592ce867fa2e9bcbffbe2130397078132/uast-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle-api/3.0.1/92640ae3c543aa3faee7b954ce641d03949d4401/gradle-api-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.databinding/compilerCommon/3.0.1/7f51b3e1636063e491131a0b0436512131cb1bdc/compilerCommon-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/transform-api/2.0.0-deprecated-use-gradle-api/47f6c56527c42425742fa9b56ffd3fd80763fe03/transform-api-2.0.0-deprecated-use-gradle-api.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/5.1/6d1bf8989fc7901f868bee3863c44f21aa63d110/asm-analysis-5.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/5.1/25d8a575034dd9cfcb375a39b5334f0ba9c8474e/asm-commons-5.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/5.1/b60e33a6bd0d71831e0c249816d01e6c1dd90a47/asm-util-5.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/5.1/87b38c12a0ea645791ead9d3e74ae5268d1d6c34/asm-tree-5.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/5.1/5ef31c4fe953b1fd00b8a88fa1d6820e8785bb45/asm-5.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jacoco/org.jacoco.report/0.7.4.201502262128/5c6bb5f95ae695dc4510b95f7d5ad0397e4881ad/org.jacoco.report-0.7.4.201502262128.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jacoco/org.jacoco.core/0.7.4.201502262128/31482f50411a3a5769b6c78fa9b97ba731c205e7/org.jacoco.core-0.7.4.201502262128.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/net.sf.jopt-simple/jopt-simple/4.9/ee9e9eaa0a35360dcfeac129ff4923215fd65904/jopt-simple-4.9.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/net.sf.proguard/proguard-gradle/5.3.3/ad23a0505f58d0dfc95bb1472decc397460406c9/proguard-gradle-5.3.3.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.analytics-library/tracker/26.0.1/15f0c0560c8a97700651d2dd5219937baa80c166/tracker-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.analytics-library/shared/26.0.1/5cfc3811c2fd6cddfce2ec1bb5fbbec87e0fc462/shared-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.analytics-library/protos/26.0.1/7719e7ed7498e25ec555bdfcb7a4de0e88a47ea/protos-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protobuf-java/3.0.0/6d325aa7c921661d84577c0a93d82da4df9fa4c8/protobuf-java-3.0.0.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/1.1.60/64c9714b95a3c6cc662c0b4185c6651d5bfb86c6/kotlin-script-runtime-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-build-common/1.1.60/5d80ca486fd5be2ad431a12295c110de77af9d9b/kotlin-build-common-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-daemon-client/1.1.60/e614c9c3352a6c0faf9fe1344cfb1d9f5789dcd4/kotlin-daemon-client-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/builder-model/3.0.1/e9de7e34339a8eb90fda30ac6bf580d5f2c4f282/builder-model-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/builder-test-api/3.0.1/5f084a2888a7f638c4c89c3278760345b1fb4c8/builder-test-api-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.ddms/ddmlib/26.0.1/d4bcdb3a578812688ccc34f1359702601fea955d/ddmlib-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.layoutlib/layoutlib-api/26.0.1/4eb1f46803873ff996f2457d1dd64c5c305818d8/layoutlib-api-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools/dvlib/26.0.1/46f3eeaf812811374b4ea2c49ad52687a7ff6a87/dvlib-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools/common/26.0.1/38e362a43a905b6745d609bea37faddb0c5bffab/common-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.build/apksig/3.0.1/535b9323a1bd47e3a9c860d11f4e11a80db13f2b/apksig-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.squareup/javawriter/2.5.0/81241ff7078ef14f42ea2a8995fa09c096256e6b/javawriter-2.5.0.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.bouncycastle/bcpkix-jdk15on/1.56/4648af70268b6fdb24674fb1fd7c1fcc73db1231/bcpkix-jdk15on-1.56.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.bouncycastle/bcprov-jdk15on/1.56/a153c6f9744a3e9dd6feab5e210e1c9861362ec7/bcprov-jdk15on-1.56.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/it.unimi.dsi/fastutil/7.2.0/5ad3a2bb04143f70aa0765fc29fc29571a7d6b34/fastutil-7.2.0.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.googlecode.json-simple/json-simple/1.1/5e303a03d04e6788dddfa3655272580ae0fc13bb/json-simple-1.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.eclipse.jdt.core.compiler/ecj/4.6.1/5555607add54eb79c5a0729134e663fe2e6300c2/ecj-4.6.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.google.jimfs/jimfs/1.1/8fbd0579dc68aba6186935cc1bee21d2f3e7ec1c/jimfs-1.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.external.lombok/lombok-ast/0.2.3/528b6f8bde3157f17530aa366631f2aad2a6cf9/lombok-ast-0.2.3.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/22.0/3564ef3803de51fb0530a8377ec6100b33b0d073/guava-22.0.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.databinding/baseLibrary/3.0.1/cc0483d84342e82c261aeb5fd0ef2f876b587489/baseLibrary-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.antlr/antlr4/4.5.3/f35db7e4b2446e4174ba6a73db7bd6b3e6bb5da1/antlr4-4.5.3.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/2.4/b1b6ea3b7e4aa4f492509a4952029cd8e48019ad/commons-io-2.4.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.googlecode.juniversalchardet/juniversalchardet/1.0.3/cd49678784c46aa8789c060538e0154013bb421b/juniversalchardet-1.0.3.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools/annotations/26.0.1/29012758503f56c7dc0714eda494f7f140fd3db8/annotations-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/net.sf.proguard/proguard-base/5.3.3/988b6b0636ce343d4962b3b37f6319dcc6e99a61/proguard-base-5.3.3.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.3/5fc52c41ef0239d1093a1eb7c3697036183677ce/gson-2.3.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-compress/1.12/84caa68576e345eb5e7ae61a0e5a9229eb100d7b/commons-compress-1.12.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.2.6/e4ca30a6a3a075053a61c6fc850d2432dc012ba7/httpclient-4.2.6.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpmime/4.1/9ba2dcdf94ce35c8a8e9bff242db0618ca932e92/httpmime-4.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/net.sf.kxml/kxml2/2.3.0/ccbc77a5fd907ef863c29f3596c6f54ffa4e9442/kxml2-2.3.0.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/1.3.9/40719ea6961c0cb6afaeb6a921eaa1f6afd4cfdf/jsr305-1.3.9.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.0.18/5f65affce1684999e2f4024983835efc3504012e/error_prone_annotations-2.0.18.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.1/ed28ded51a8b1c6b112568def5f4b455e6809019/j2objc-annotations-1.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.codehaus.mojo/animal-sniffer-annotations/1.14/775b7e22fb10026eed3f86e8dc556dfafe35f2d5/animal-sniffer-annotations-1.14.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.intellij/annotations/12.0/bbcf6448f6d40abe506e2c83b70a3e8bfd2b4539/annotations-12.0.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.2.5/472f0f5f8dba5d1962cb9d7739feed739a31c30d/httpcore-4.2.5.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.1.1/5043bfebc3db072ed80fbd362e7caf00e885d8ae/commons-logging-1.1.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.6/b7f0fc8f61ecadeb3695f0b9464755eee44374d4/commons-codec-1.6.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/com.android.tools.external.com-intellij/intellij-core/26.0.1/a373ed549821cb9a932b87c79792790f6d018727/intellij-core-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.trove4j/trove4j/20160824/33c3e174a9c8368d93761d3d12712db18e903959/trove4j-20160824.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar

Android Studio 3

:file:/Users/fabian/.gradle/caches/jars-3/5c3c987e568a7e2d3123b7ee57cbfba4/gradle-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-gradle-plugin/1.1.60/dc7acce581312f418c1ad55932ab770da61e205d/kotlin-gradle-plugin-1.1.60.jar
:file:/Users/fabian/.gradle/caches/jars-3/fe69a7a42fede0fe8676722d0d7cf970/gradle-core-3.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-gradle-plugin-api/1.1.60/97a69272b6dc47f9ca1f523859e4819a1c61cb39/kotlin-gradle-plugin-api-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-annotation-processing-gradle/1.1.60/8f2d3fef4c0d7ecfc85fa51744153f399cdeb3a2/kotlin-annotation-processing-gradle-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-android-extensions/1.1.60/3b6a750e48ac6a4ca5f0fba633385825610dce3e/kotlin-android-extensions-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-runner/1.1.60/d2586f88979235b4b102348c431d888bdd2cf63f/kotlin-compiler-runner-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embeddable/1.1.60/e0ea7c24d46acc433ece025023868bf9ffe5e437/kotlin-compiler-embeddable-1.1.60.jar
:file:/Users/fabian/.gradle/caches/jars-3/a8f9cc8f57e57275dd7e0e4f887563b1/builder-3.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/d25ae0a93cc8161073ed411ccf2f15f2/lint-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/071188ed2a50fef0d4b8e73b6b538d10/lint-checks-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/340d79f490a37a2e826af11e3f4356ec/lint-api-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/15dc424ff5261869cedb4c0e5a20e245/manifest-merger-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/f391b93f631315d2bdf9d377b80e5b91/sdk-common-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/9f07ffbf4dbdecd6e41e9ee00501122c/sdklib-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/5c35e0a9d78e5d47cd8822b1bf46921d/repository-26.0.1.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.1.60/af5cabae2d352850b076213f358dc2150b14a812/kotlin-reflect-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.60/ac63d0e86e690fe4eded7f1f8998996c28499989/kotlin-stdlib-1.1.60.jar
:file:/Users/fabian/.gradle/caches/jars-3/316e5431a2b687ac56c7f6dbcc1c9494/uast-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/a639f12d6f35274aeb5b84917d018543/gradle-api-3.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/5a815f3f93ee3ea5fddb0b336108fdb3/compilerCommon-3.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/985172a195bdfbab4cdfffc88b22ac93/transform-api-2.0.0-deprecated-use-gradle-api.jar
:file:/Users/fabian/.gradle/caches/jars-3/0c311c56cf8ab286a5dc313445596433/asm-analysis-5.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/08cdd41fe1f26baeb39b42fea9560740/asm-commons-5.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/01be4c5f22346cb9b30cf8da870a55d5/asm-util-5.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/bc49c094a2443fb7fadba7269dffb02a/asm-tree-5.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/0ede7333fe09a80fbc4fe1a0c9b586cd/asm-5.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/6a74a1be83056603e80b6cb9e0149ecc/org.jacoco.report-0.7.4.201502262128.jar
:file:/Users/fabian/.gradle/caches/jars-3/ca06f182421af2dc08b18e644cc5b319/org.jacoco.core-0.7.4.201502262128.jar
:file:/Users/fabian/.gradle/caches/jars-3/c93e74da8ceb3a75ff5456599f439b40/jopt-simple-4.9.jar
:file:/Users/fabian/.gradle/caches/jars-3/aef91c30517375c16ce5441e84be0f5e/proguard-gradle-5.3.3.jar
:file:/Users/fabian/.gradle/caches/jars-3/c3b9ad2921cb4003eeaddbb23f1bfb23/tracker-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/9a42f5d0dd49033b57521cc6c85be9f6/shared-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/cdc03ae28f60a08250fb893b1c0c1c3c/protos-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/fe162220f4ea1f4503f6542c24ae17ff/protobuf-java-3.0.0.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/1.1.60/64c9714b95a3c6cc662c0b4185c6651d5bfb86c6/kotlin-script-runtime-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-build-common/1.1.60/5d80ca486fd5be2ad431a12295c110de77af9d9b/kotlin-build-common-1.1.60.jar
:file:/Users/fabian/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-daemon-client/1.1.60/e614c9c3352a6c0faf9fe1344cfb1d9f5789dcd4/kotlin-daemon-client-1.1.60.jar
:file:/Users/fabian/.gradle/caches/jars-3/3ce94ec18e773c9e1432f0c89c2bbc67/builder-model-3.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/74f46a71cbc0daafe52fd9ca69f86088/builder-test-api-3.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/91cfa2a1bec56e3e8584f4f38f251732/ddmlib-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/de93659978da7bad7bf37b9211f6615c/layoutlib-api-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/8b887508080d58a8a7a937748c62312f/dvlib-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/3f310810d038e2c3a4c3f8aed1006b7c/common-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/05f05a993a765572b156b5e6e27cfca6/apksig-3.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/c758fa8868209f4d03b01225e1ed2001/javawriter-2.5.0.jar
:file:/Users/fabian/.gradle/caches/jars-3/a13765522a6a2719251f3c45666b012b/bcpkix-jdk15on-1.56.jar
:file:/Users/fabian/.gradle/caches/jars-3/e0daa3dd76e278d343c26d2295b4574d/bcprov-jdk15on-1.56.jar
:file:/Users/fabian/.gradle/caches/jars-3/a007888cf940169896c734d0e8fa7bf1/fastutil-7.2.0.jar
:file:/Users/fabian/.gradle/caches/jars-3/886874542f908119a3606ae736c6e667/json-simple-1.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/4b48ac71e1d8214740ba4d1810348f40/ecj-4.6.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/de8d73ecf39301704b1c7f034cd2130b/jimfs-1.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/ccaa7be1bcfaaae3e3572d91dde1bd8e/lombok-ast-0.2.3.jar
:file:/Users/fabian/.gradle/caches/jars-3/3c96b3800bef5a9d130642a5fce696b5/guava-22.0.jar
:file:/Users/fabian/.gradle/caches/jars-3/e19d6a55138675ee89b434bb2cb4b9c1/baseLibrary-3.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/a65edfa7b9842d93dc7c423619bf678f/antlr4-4.5.3.jar
:file:/Users/fabian/.gradle/caches/jars-3/cd2efe6fe5cb7c2f6f78581f68a8a39b/commons-io-2.4.jar
:file:/Users/fabian/.gradle/caches/jars-3/891a605f5da1268301fcb1a7ef45692d/juniversalchardet-1.0.3.jar
:file:/Users/fabian/.gradle/caches/jars-3/8af8ffac1dad04f8f37718b273bcc66a/annotations-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/3e3040dc2daab2a7347504eb413f0df5/proguard-base-5.3.3.jar
:file:/Users/fabian/.gradle/caches/jars-3/54bd9f2c9aacc506ff6cbfb91308680e/gson-2.3.jar
:file:/Users/fabian/.gradle/caches/jars-3/6d1a19fc7bf82a43f3c9fa5a512a45ec/commons-compress-1.12.jar
:file:/Users/fabian/.gradle/caches/jars-3/d42bf4fcccc63f349c6810abfcd8877a/httpclient-4.2.6.jar
:file:/Users/fabian/.gradle/caches/jars-3/5a14ce4d8ba906c5d0043250e8894139/httpmime-4.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/4352e397eb3e8adfc2bd942162e1dc9c/kxml2-2.3.0.jar
:file:/Users/fabian/.gradle/caches/jars-3/258dd0c3148622e9c507fcb6c0649341/jsr305-1.3.9.jar
:file:/Users/fabian/.gradle/caches/jars-3/b8797c82c20181ba870036c2868f473d/error_prone_annotations-2.0.18.jar
:file:/Users/fabian/.gradle/caches/jars-3/e9abfccb43bd544f77a0d92ec9afadd7/j2objc-annotations-1.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/da76d16a7380e837619b3393622b331c/animal-sniffer-annotations-1.14.jar
:file:/Users/fabian/.gradle/caches/jars-3/212ba5c11546ef79a308fcadac8844ce/annotations-12.0.jar
:file:/Users/fabian/.gradle/caches/jars-3/81dc9d67dc6677389b34cb21689a42ad/httpcore-4.2.5.jar
:file:/Users/fabian/.gradle/caches/jars-3/b958e1f87f076c583b5ee3dbc28a0bda/commons-logging-1.1.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/6d14fda7961c06a1d3f65b914902aaca/commons-codec-1.6.jar
:file:/Users/fabian/.gradle/caches/jars-3/367f362894b985620b81cdea0275dc25/intellij-core-26.0.1.jar
:file:/Users/fabian/.gradle/caches/jars-3/2fdf665fbc793b995ec1aa5bd3f1c61e/trove4j-20160824.jar
:file:/Users/fabian/.gradle/caches/jars-3/461985c1f4e307944bd7490eedc627b4/annotations-13.0.jar