Search code examples
cachinggradleandroid-gradle-plugin

Is there a simple way to remove one dependency from the local gradle cache?


The local gradle cache stores copies of maven/gradle dependencies. How to clear gradle cache? covers how to clear the whole cache, but not individual packages.

Is there a simple way to remove one package from the local gradle cache? This would be useful, for example, when actively developing a library. To test a minor library change, I currently have to clear the entire cache from the filesystem so an old cached version of the library is not used.

I understand it is also possible to use the gradle ResolutionStrategy described in How can I force gradle to redownload dependencies?. I would prefer not to change the gradle configuration because most of the time and for most developers, the default caching behavior is fine.


Solution

  • So here's a quick script I whipped up:

    seekanddestroy.gradle

    defaultTasks 'seekAndDestroy'
    
    repositories{ //this section *needs* to be identical to the repositories section of your build.gradle
        jcenter() 
    }
    
    configurations{
        findanddelete
    }
    
    dependencies{
        //add any dependencies that  you need refreshed
        findanddelete 'org.apache.commons:commons-math3:3.2'
    }
    
    task seekAndDestroy{
        doLast {
            configurations.findanddelete.each{ 
                println 'Deleting: '+ it
                delete it.parent
            }
        }
    }
    

    You can invoke this script by running gradle -b seekanddestroy.gradle


    Demo of how it works: if your build.gradle looks like this:

    apply plugin:'java'
    
    repositories{
        jcenter()
    }
    
    dependencies{
    
        compile 'org.apache.commons:commons-math3:3.2'
    }
    

    First time build, includes a download of the dependency:

    λ gradle clean build | grep Download
    Download https://jcenter.bintray.com/org/apache/commons/commons-math3/3.2/commons-math3-3.2.jar
    

    Second clean build, uses cached dependency, so no download:

    λ gradle clean build | grep Download
    

    Now run seekanddestroy:

    λ gradle -b seekanddestroy.gradle  -q
    Deleting: .gradle\caches\modules-2\files-2.1\org.apache.commons\commons-math3\3.2\ec2544ab27e110d2d431bdad7d538ed509b21e62\commons-math3-3.2.jar
    

    Next build, downloads dependency again:

    λ gradle clean build | grep Download
    Download https://jcenter.bintray.com/org/apache/commons/commons-math3/3.2/commons-math3-3.2.jar