/*
* Modified from https://gist.github.com/xian/05c4f27da6d4156b9827842217c2cd5c
* Reference: http://robolectric.org/blog/2017/03/01/hermetic-builds/
*/
defaultTasks 'copyLibs'
def shadowArtifacts = [
"org.robolectric:shadows-framework:${robolectricVersion}",
"org.robolectric:shadows-httpclient:${robolectricVersion}",
"org.robolectric:shadows-multidex:${robolectricVersion}",
"org.robolectric:shadows-playservices:${robolectricVersion}",
"org.robolectric:shadows-supportv4:${robolectricVersion}",
]
def buildDir = System.getProperty("user.dir")
apply plugin: 'java'
repositories {
mavenCentral()
}
configurations {
sandbox
roboSources
}
// In this section you declare the dependencies for your production and test code
dependencies {
compile("org.robolectric:robolectric:${robolectricVersion}") {
// we don't need these MavenDependencyResolver in a hermetic build
exclude group: 'org.apache.maven', module: 'maven-ant-tasks'
exclude group: 'org.apache.ant', module: 'ant'
}
compile('com.ximpleware:vtd-xml:2.11')
// Force ASM dependency to be 6.0 for JDK9 support
compile('org.ow2.asm:asm:6.0')
compile('org.ow2.asm:asm-commons:6.0')
shadowArtifacts.forEach { shadowArtifact ->
compile shadowArtifact
sandbox shadowArtifact
}
def shadowArtifactsSet = shadowArtifacts.collect {it.toString()} toSet()
configurations.runtime.resolvedConfiguration.resolvedArtifacts.each { ResolvedArtifact ra ->
ModuleVersionIdentifier id = ra.moduleVersion.id
// download only core sources. relax restriction if required
if ("org.robolectric".equals(id.group) && !shadowArtifactsSet.contains(id.toString())) {
roboSources("${id.group}:${id.name}:${id.version}:sources") {
transitive = false
}
}
}
}
task copyLibs(type: Copy) {
from configurations.compile
from configurations.roboSources
into "$buildDir/lib"
doLast {
def f = new File("$buildDir/classpath_jars.mk")
f.delete()
def jars = source.getFiles()
.collect { it.name }
.sort()
.findAll { !it.endsWith("sources.jar") }
.collect { " lib/${it} " }
f << "my_robolectric_runtime_deps := \\\n" << jars.join("\\\n") << "\n"
}
}