blob: fc6e13a51be0cc83a46cb05eb8c7405a2e67960a [file] [log] [blame]
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()
}
}