I don’t think Gradle has any built in support for accomplishing this, but you can clean the artifacts out from the classpath yourself.
Inspired by this thread on the Gradle forums I came up with this:
// The artifacts we don't want, dependency as key and artifacts as values
def unwantedArtifacts = [
"dep.location:example": [ "foo-1-0-xml", "bar-1-0", "bar-1-0-async", "bar-1-0-xml"],
]
// Collect the files that should be excluded from the classpath
def excludedFiles = configurations.compile.resolvedConfiguration.resolvedArtifacts.findAll {
def moduleId = it.moduleVersion.id
def moduleString = "${moduleId.group}:${moduleId.name}:${moduleId.version}" // Construct the dependecy string
// Get the artifacts (if any) we should remove from this dependency and check if this artifact is in there
it.name in (unwantedArtifacts.find { key, value -> moduleString.startsWith key }?.value)
}*.file
// Remove the files from the classpath
sourceSets {
main {
compileClasspath -= files(excludedFiles)
}
test {
compileClasspath -= files(excludedFiles)
}
}
Note that Gradle will probably still download the files and cache them for you, but they should not be in your classpath.