buildscript { repositories { jcenter() // TODO: remove this when robolectric 2.4 is released. maven { url "https://oss.sonatype.org/content/repositories/snapshots" } } dependencies { classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+' classpath 'com.android.tools.build:gradle:0.12.+' } } allprojects { repositories { jcenter() // TODO: remove this when robolectric 2.4 is released. maven { url "https://oss.sonatype.org/content/repositories/snapshots" } } apply plugin: 'checkstyle' checkstyle { configFile = new File(rootDir, 'checkstyle.xml') } task checkstyle(type: Checkstyle) { source 'src' include '**/*.java' exclude '**/gen/**' // empty classpath classpath = files() } } apply plugin: 'java' task wrapper(type: Wrapper) { gradleVersion = '1.12' } evaluationDependsOn(":third_party:gif_decoder") evaluationDependsOn(":third_party:disklrucache") evaluationDependsOn(":library") def getAndroidSdkDirectory() { project("library").android.sdkDirectory } def getAndroidCompileSdkVersion() { project("library").android.compileSdkVersion } def getAndroidChildren() { subprojects.findAll { project -> project.plugins.hasPlugin('android-library') } } // For now this is just [release, debug] def getAndroidLibraryVariants() { getAndroidChildren().collect { project -> project.android.libraryVariants }.sum().unique{ it.name } } // Currently the only excluded project is the :integration:volley project. def androidProjects = [':third_party:gif_decoder', ':library'].collect { project(it) } def javaProjects = [':third_party:disklrucache'].collect { project(it) } def allProjects = androidProjects + javaProjects def releaseVariantAndroidProjects = androidProjects.collect { it.android.libraryVariants.findAll { variant -> variant.buildType.name.equalsIgnoreCase("release") } } // Generate javadocs containing batched documentation for all android library subprojects. getAndroidLibraryVariants().each { variant -> def androidJar = "${getAndroidSdkDirectory()}/platforms/${getAndroidCompileSdkVersion()}/android.jar" def destinationDirPath = "${getProjectDir()}/doc/${variant.baseName}" task("clean${variant.name.capitalize()}Javadoc", type: Delete) { delete destinationDirPath } def javadocTask = task("${variant.name}Javadoc", type: Javadoc) { classifier = 'javadoc' // Get the variant from each subproject that matches our current variant's name. def childEquivalentChildVariants = getAndroidChildren().collect { project -> project.android.libraryVariants.findAll { type -> type.name == variant.name } }.sum() source = childEquivalentChildVariants.collect { it.javaCompile.source } source += javaProjects.collect { it.sourceSets.main.allJava } classpath = files(childEquivalentChildVariants.collect { files(it.javaCompile.classpath.files, androidJar) }) classpath += javaProjects.collect { files(it.configurations.compile) } options { links("http://docs.oracle.com/javase/7/docs/api/") linksOffline("http://d.android.com/reference", "${getAndroidSdkDirectory()}/docs/reference") } exclude '**/BuildConfig.java' exclude '**/R.java' destinationDir = new File(destinationDirPath) } javadocTask.dependsOn("clean${variant.name.capitalize()}Javadoc") } /** Build a fat jar of all internal dependencies */ def releaseJarOut = 'bin' task releaseJar(type: Jar) { from files( releaseVariantAndroidProjects.collect { variant -> variant.javaCompile.destinationDir } ) exclude "**/R.class" exclude "**/BuildConfig.class" from files(javaProjects.collect { it.sourceSets.main.output }) destinationDir = file(releaseJarOut) baseName = "glide-${VERSION_NAME}" } task cleanReleaseJar(type: Delete) { delete releaseJarOut } releaseJar.dependsOn(cleanReleaseJar) allProjects.each { project -> releaseJar.dependsOn(project.tasks.getByName("checkstyle")) releaseJar.dependsOn(project.build) } artifacts { archives releaseJar }