Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 895
mattm Avatar asked Apr 08 '16 18:04

mattm


People also ask

Can I clear Gradle cache?

gradle/caches directory holds the Gradle build cache. So if you have any error about build cache, you can delete it. The --no-build-cache option will run gradle without the build cache.

Where are Gradle caches dependencies?

The Gradle dependency cache consists of two storage types located under GRADLE_USER_HOME/caches : A file-based store of downloaded artifacts, including binaries like jars as well as raw downloaded meta-data like POM files and Ivy files.

Where are Gradle dependencies stored locally?

Local binary dependency Gradle declares dependencies on JAR files inside your project's module_name /libs/ directory (because Gradle reads paths relative to the build.gradle file).


Video Answer


2 Answers

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()<<{
    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
like image 101
RaGe Avatar answered Oct 13 '22 04:10

RaGe


Works great, but for newer versions of gradle, use this instead:

task seekAndDestroy{
    doLast {
        configurations.findanddelete.each{ 
            println 'Deleting: '+ it
            delete it.parent
        }
    }
}
like image 32
dhaag23 Avatar answered Oct 13 '22 05:10

dhaag23