| import org.gradle.api.JavaVersion |
| import org.gradle.api.Plugin |
| import org.gradle.api.Project |
| import org.gradle.api.artifacts.maven.MavenDeployment |
| import org.gradle.api.tasks.bundling.Jar |
| import org.gradle.api.tasks.compile.JavaCompile |
| |
| class RoboJavaModulePlugin implements Plugin<Project> { |
| Boolean deploy = false; |
| |
| Closure doApply = { |
| apply plugin: "java" |
| sourceCompatibility = JavaVersion.VERSION_1_8 |
| targetCompatibility = JavaVersion.VERSION_1_8 |
| |
| tasks.withType(JavaCompile) { task -> |
| sourceCompatibility = JavaVersion.VERSION_1_8 |
| targetCompatibility = JavaVersion.VERSION_1_8 |
| |
| // Show all warnings except boot classpath |
| configure(options) { |
| if (System.properties["lint"] != null && System.properties["lint"] != "false") { |
| compilerArgs << "-Xlint:all" // Turn on all warnings |
| } |
| compilerArgs << "-Xlint:-options" // Turn off "missing" bootclasspath warning |
| encoding = "utf-8" // Make sure source encoding is UTF-8 |
| incremental = true |
| } |
| |
| def noRebuild = System.getenv('NO_REBUILD') == "true" |
| if (noRebuild) { |
| println "[NO_REBUILD] $task will be skipped!" |
| task.outputs.upToDateWhen { true } |
| task.onlyIf { false } |
| } |
| } |
| |
| // it's weird that compileOnly deps aren't included for test compilation; fix that: |
| project.sourceSets { |
| test.compileClasspath += project.configurations.compileOnly |
| } |
| |
| ext.mavenArtifactName = project.path.substring(1).split(/:/).join("-") |
| |
| task('provideBuildClasspath', type: ProvideBuildClasspathTask) { |
| File outDir = project.sourceSets['test'].output.resourcesDir |
| outFile = new File(outDir, 'robolectric-deps.properties') |
| } |
| |
| test { |
| dependsOn provideBuildClasspath |
| |
| exclude "**/*\$*" // otherwise gradle runs static inner classes like TestRunnerSequenceTest$SimpleTest |
| testLogging { |
| exceptionFormat "full" |
| showCauses true |
| showExceptions true |
| showStackTraces true |
| showStandardStreams true |
| events = ["failed", "skipped"] |
| } |
| |
| minHeapSize = "1024m" |
| maxHeapSize = "3172m" |
| |
| if (System.env['GRADLE_MAX_PARALLEL_FORKS'] != null) { |
| maxParallelForks = Integer.parseInt(System.env['GRADLE_MAX_PARALLEL_FORKS']) |
| } |
| |
| def forwardedSystemProperties = System.properties |
| .findAll { k,v -> k.startsWith("robolectric.") } |
| .collect { k,v -> "-D$k=$v" } |
| jvmArgs = ["-XX:MaxPermSize=1024m"] + forwardedSystemProperties |
| |
| doFirst { |
| if (!forwardedSystemProperties.isEmpty()) { |
| println "Running tests with ${forwardedSystemProperties}" |
| } |
| } |
| |
| rootProject.tasks['aggregateTestReports'].reportOn binResultsDir |
| finalizedBy ':aggregateTestReports' |
| } |
| |
| if (owner.deploy) { |
| project.apply plugin: "signing" |
| project.apply plugin: "maven" |
| project.apply plugin: 'ch.raffael.pegdown-doclet' |
| |
| task('sourcesJar', type: Jar, dependsOn: classes) { |
| classifier "sources" |
| from sourceSets.main.allJava |
| } |
| |
| javadoc { |
| failOnError = false |
| source = sourceSets.main.allJava |
| } |
| |
| task('javadocJar', type: Jar, dependsOn: javadoc) { |
| classifier "javadoc" |
| from javadoc.destinationDir |
| } |
| |
| signing { |
| required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("uploadArchives") } |
| sign configurations.archives |
| } |
| |
| def skipJavadoc = System.getenv('SKIP_JAVADOC') == "true" |
| artifacts { |
| archives jar |
| archives sourcesJar |
| if (!skipJavadoc) { |
| archives javadocJar |
| } |
| } |
| |
| uploadArchives { |
| repositories { |
| mavenDeployer { |
| pom.artifactId = mavenArtifactName |
| pom.project { |
| name project.name |
| description = "An alternative Android testing framework." |
| url = "http://robolectric.org" |
| |
| licenses { |
| license { |
| name "The MIT License" |
| url "https://opensource.org/licenses/MIT" |
| } |
| } |
| |
| scm { |
| url "git@github.com:robolectric/robolectric.git" |
| connection "scm:git:git://github.com/robolectric/robolectric.git" |
| developerConnection "scm:git:https://github.com/robolectric/robolectric.git" |
| } |
| |
| developers { |
| developer { |
| name "Christian Williams" |
| email "christianw@google.com" |
| organization = "Google Inc." |
| organizationUrl "http://google.com" |
| } |
| |
| developer { |
| name "Jonathan Gerrish" |
| email "jongerrish@google.com" |
| organization = "Google Inc." |
| organizationUrl "http://google.com" |
| } |
| } |
| } |
| |
| def url = project.version.endsWith("-SNAPSHOT") ? |
| "https://oss.sonatype.org/content/repositories/snapshots" : |
| "https://oss.sonatype.org/service/local/staging/deploy/maven2/" |
| repository(url: url) { |
| authentication( |
| userName: System.properties["sonatype-login"] || System.env['sonatypeLogin'], |
| password: System.properties["sonatype-password"] || System.env['sonatypePassword'] |
| ) |
| } |
| |
| beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } |
| } |
| } |
| } |
| } |
| } |
| |
| @Override |
| void apply(Project project) { |
| doApply.delegate = project |
| doApply.resolveStrategy = Closure.DELEGATE_ONLY |
| doApply() |
| } |
| } |