| import org.gradle.plugins.ide.idea.model.IdeaModel |
| |
| buildscript { |
| repositories { |
| google() |
| jcenter() |
| gradlePluginPortal() |
| } |
| |
| dependencies { |
| classpath 'com.android.tools.build:gradle:3.2.1' |
| classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.6' |
| classpath 'com.netflix.nebula:gradle-aggregate-javadocs-plugin:2.2.1' |
| classpath 'ch.raffael.pegdown-doclet:pegdown-doclet:1.3' |
| } |
| } |
| |
| allprojects { |
| repositories { |
| google() |
| jcenter() |
| mavenCentral() |
| } |
| |
| group = "org.robolectric" |
| version = thisVersion |
| } |
| |
| apply plugin: 'idea' |
| |
| project.ext.configAnnotationProcessing = [] |
| project.afterEvaluate { |
| def ideaProject = rootProject.extensions.getByType(IdeaModel).project |
| ideaProject.ipr.withXml { provider -> |
| def compilerConfiguration = provider.asNode().component.find { it.'@name' == 'CompilerConfiguration' } |
| |
| // prevent compiler from complaining about duplicate classes... |
| def excludeFromCompile = compilerConfiguration.appendNode 'excludeFromCompile' |
| configAnnotationProcessing.each { Project subProject -> |
| excludeFromCompile.appendNode('directory', |
| [url: "file://${subProject.buildDir}/classes/java/main/generated", includeSubdirectories: "true"]) |
| } |
| |
| // replace existing annotationProcessing tag with a new one... |
| compilerConfiguration.annotationProcessing.replaceNode { |
| annotationProcessing { |
| configAnnotationProcessing.each { Project subProject -> |
| profile(name: "${subProject.name}_main", enabled: "true") { |
| module(name: "${subProject.name}_main") |
| option(name: "org.robolectric.annotation.processing.shadowPackage", |
| value: subProject.shadows.packageName) |
| processor(name: "org.robolectric.annotation.processing.RobolectricProcessor") |
| |
| processorPath(useClasspath: "false") { |
| def processorRuntimeCfg = project.project(":processor").configurations['runtime'] |
| processorRuntimeCfg.allArtifacts.each { artifact -> |
| entry(name: artifact.file) |
| } |
| processorRuntimeCfg.files.each { file -> |
| entry(name: file) |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| apply plugin: 'nebula-aggregate-javadocs' |
| apply plugin: 'ch.raffael.pegdown-doclet' |
| |
| rootProject.gradle.projectsEvaluated { |
| rootProject.tasks['aggregateJavadocs'].failOnError = false |
| } |
| |
| task aggregateTestReports(type: TestReport) { |
| def jobNumber = System.getenv('TRAVIS_JOB_NUMBER') |
| if (jobNumber == null) { |
| destinationDir = file("$buildDir/reports/allTests") |
| } else { |
| destinationDir = file("$buildDir/reports/allTests/$jobNumber") |
| } |
| } |
| |
| task prefetchSdks() { |
| AndroidSdk.ALL_SDKS.each { androidSdk -> |
| doLast { |
| println("Prefetching ${androidSdk.coordinates}...") |
| // prefetch into maven local repo... |
| def mvnCommand = "mvn -q dependency:get -DrepoUrl=http://maven.google.com \ |
| -DgroupId=${androidSdk.groupId} -DartifactId=${androidSdk.artifactId} \ |
| -Dversion=${androidSdk.version}" |
| shellExec(mvnCommand) |
| |
| // prefetch into gradle local cache... |
| def config = configurations.create("sdk${androidSdk.apiLevel}") |
| dependencies.add("sdk${androidSdk.apiLevel}", androidSdk.coordinates) |
| // causes dependencies to be resolved: |
| config.files |
| } |
| } |
| } |
| |
| private void shellExec(String mvnCommand) { |
| def process = mvnCommand.execute() |
| def out = new StringBuffer() |
| def err = new StringBuffer() |
| process.consumeProcessOutput(out, err) |
| process.waitFor() |
| if (out.size() > 0) println out |
| if (err.size() > 0) println err |
| if (process.exitValue() != 0) System.exit(1) |
| } |
| |
| task prefetchDependencies() { |
| doLast { |
| allprojects.each { p -> |
| p.configurations.each { config -> |
| // causes dependencies to be resolved: |
| if (config.isCanBeResolved()) { |
| config.files |
| } |
| } |
| } |
| } |
| } |
| |
| // for use of external initialization scripts... |
| project.ext.allSdks = AndroidSdk.ALL_SDKS |