/* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ apply plugin: 'maven' apply plugin: 'signing' apply plugin: 'maven-publish' def getVersionName() { return isSnapshotBuild() ? VERSION_NAME+".0-SNAPSHOT" : VERSION_NAME } version = getVersionName() group = GROUP def isSnapshotBuild() { return hasProperty('isSnapshot') && project.isSnapshot == "true" } def getReleaseRepositoryUrl() { return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL : "https://aws.oss.sonatype.org/service/local/staging/deploy/maven2/" } def getSnapshotRepositoryUrl() { return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL : "https://aws.oss.sonatype.org/content/repositories/snapshots/" } def getRepositoryUsername() { return hasProperty('SONATYPE_NEXUS_USERNAME') ? SONATYPE_NEXUS_USERNAME : "" } def getRepositoryPassword() { return hasProperty('SONATYPE_NEXUS_PASSWORD') ? SONATYPE_NEXUS_PASSWORD : "" } archivesBaseName = POM_ARTIFACT_ID afterEvaluate { project -> uploadArchives { repositories { if (project.hasProperty('SONATYPE_NEXUS_USERNAME')) { mavenDeployer { beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } pom.groupId = GROUP pom.artifactId = POM_ARTIFACT_ID pom.version = getVersionName() repository(url: getReleaseRepositoryUrl()) { authentication(userName: getRepositoryUsername(), password: getRepositoryPassword()) } snapshotRepository(url: getSnapshotRepositoryUrl()) { authentication(userName: getRepositoryUsername(), password: getRepositoryPassword()) } pom.project { name POM_NAME packaging POM_PACKAGING description POM_DESCRIPTION url POM_URL scm { url POM_SCM_URL connection POM_SCM_CONNECTION developerConnection POM_SCM_DEV_CONNECTION } licenses { license { name POM_LICENCE_NAME url POM_LICENCE_URL distribution POM_LICENCE_DIST } } developers { developer { id POM_DEVELOPER_ID organizationUrl POM_DEVELOPER_ORGANIZATION_URL roles { role "developer" } } } } } } else { mavenInstaller { pom.groupId = GROUP pom.artifactId = POM_ARTIFACT_ID pom.version = getVersionName() } } } } signing { required { !isSnapshotBuild() && gradle.taskGraph.hasTask("uploadArchives") } if (project.hasProperty('signing.inMemoryKey')) { def signingKey = findProperty("signing.inMemoryKey").replace("\\n","\n") def signingPassword = findProperty("signing.password") def keyId = findProperty("signing.keyId") useInMemoryPgpKeys(keyId, signingKey, signingPassword) } sign configurations.archives } if (project.getPlugins().hasPlugin('com.android.application') || project.getPlugins().hasPlugin('com.android.library')) { task install(type: Upload, dependsOn: assemble) { repositories.mavenInstaller { configuration = configurations.archives pom.groupId = GROUP pom.artifactId = POM_ARTIFACT_ID pom.version = getVersionName() pom.project { name POM_NAME packaging POM_PACKAGING description POM_DESCRIPTION url POM_URL scm { url POM_SCM_URL connection POM_SCM_CONNECTION developerConnection POM_SCM_DEV_CONNECTION } licenses { license { name POM_LICENCE_NAME url POM_LICENCE_URL distribution POM_LICENCE_DIST } } developers { developer { id POM_DEVELOPER_ID organization POM_DEVELOPER_ORGANIZATION organizationUrl POM_DEVELOPER_ORGANIZATION_URL } } } } } task androidJavadocs(type: Javadoc) { failOnError false source = android.sourceSets.main.java.source classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) } afterEvaluate { androidJavadocs.classpath += files(android.libraryVariants.collect { variant -> variant.javaCompileProvider.get().classpath.files }) } task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { classifier = 'javadoc' from androidJavadocs.destinationDir } task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.source } } else { install { repositories.mavenInstaller { pom.groupId = GROUP pom.artifactId = POM_ARTIFACT_ID pom.version = getVersionName() pom.project { name POM_NAME packaging POM_PACKAGING description POM_DESCRIPTION url POM_URL scm { url POM_SCM_URL connection POM_SCM_CONNECTION developerConnection POM_SCM_DEV_CONNECTION } licenses { license { name POM_LICENCE_NAME url POM_LICENCE_URL distribution POM_LICENCE_DIST } } developers { developer { id POM_DEVELOPER_ID organization POM_DEVELOPER_ORGANIZATION organizationUrl POM_DEVELOPER_ORGANIZATION_URL } } } } } task sourcesJar(type: Jar, dependsOn: classes) { classifier = 'sources' from sourceSets.main.allSource } } artifacts { if (project.getPlugins().hasPlugin('com.android.application') || project.getPlugins().hasPlugin('com.android.library')) { archives androidSourcesJar archives androidJavadocsJar } else { archives sourcesJar } } publishing { publications { library(MavenPublication) { groupId GROUP artifactId POM_ARTIFACT_ID version getVersionName() artifact("${buildDir}/outputs/aar/${artifactId}-release.aar") pom.withXml { def dependenciesNode = asNode().appendNode('dependencies') // Note that this only handles implementation // dependencies. In the future, may need to add api, // etc. configurations.implementation.allDependencies.each { def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) } } } } } }