| /* |
| * 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}", |
| ] |
| |
| apply plugin: 'java' |
| |
| repositories { |
| mavenCentral() |
| google() |
| } |
| |
| 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: '' |
| exclude group: 'org.apache.ant', module: '' |
| } |
| |
| compile('com.ximpleware:vtd-xml:2.11') { force = true } |
| // Force ASM dependency to be 6.0 for JDK9 support |
| compile('org.ow2.asm:asm:6.0') { force = true } |
| compile('org.ow2.asm:asm-commons:6.0') { force = true } |
| compile('org.ow2.asm:asm-util:6.0') { force = true } |
| |
| shadowArtifacts.forEach { shadowArtifact -> |
| compile ("${shadowArtifact}") { |
| // we don't need these MavenDependencyResolver in a hermetic build |
| exclude group: 'org.apache.maven', module: '' |
| exclude group: 'org.apache.ant', module: '' |
| } |
| sandbox ("${shadowArtifact}") { |
| // we don't need these MavenDependencyResolver in a hermetic build |
| exclude group: 'org.apache.maven', module: '' |
| exclude group: 'org.apache.ant', module: '' |
| } |
| } |
| |
| 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" |
| } |
| } |