apply plugin: 'maven-publish'

task sourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

afterEvaluate {
    javadoc.classpath += files(android.libraryVariants.collect { variant ->
        variant.getJavaCompile().classpath.files
    })
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

publishing {
    publications {
        library(MavenPublication) {
            groupId 'com.android.volley'
            version project.version
            pom {
                name = 'Volley'
                url = 'https://github.com/google/volley'
                packaging 'aar'
                licenses {
                    license {
                      name = "The Apache License, Version 2.0"
                      url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
                    }
                }
                scm {
                    connection = 'scm:git:git://github.com/google/volley.git'
                    developerConnection = 'scm:git:ssh://git@github.com/google/volley.git'
                    url = 'https://github.com/google/volley'
                }
                developers {
                    developer {
                        name = 'The Volley Team'
                        email = 'noreply+volley@google.com'
                    }
                }
            }

            // Release AAR, Sources, and JavaDoc
            artifact sourcesJar
            artifact javadocJar
        }
    }

    repositories {
        maven {
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
            credentials {
                username = System.env.OSSRH_DEPLOY_USERNAME
                password = System.env.OSSRH_DEPLOY_PASSWORD
            }
        }
    }
}
