if (versions == null || versions.publish_version == null) { throw new IllegalStateException("Unable to reference publish_version!") } else if (module_group == null || module_name == null) { throw new IllegalStateException("Must provide module_group and module_name!") } apply plugin: 'maven-publish' apply plugin: 'signing' task androidSourcesJar(type: Jar) { archiveClassifier.set('sources') if (project.plugins.findPlugin("com.android.library")) { // For Android libraries from android.sourceSets.main.java.srcDirs from android.sourceSets.main.kotlin.srcDirs } else { // For pure Kotlin libraries, in case you have them from sourceSets.main.java.srcDirs from sourceSets.main.kotlin.srcDirs } } artifacts { archives androidSourcesJar } group = module_group version = versions.publish_version // Default values ext["signing.keyId"] = '' ext["signing.password"] = '' ext["signing.secretKeyRingFile"] = '' ext["ossrhUsername"] = '' ext["ossrhPassword"] = '' ext["sonatypeStagingProfileId"] = '' File secretPropsFile = project.rootProject.file('local.properties') if (secretPropsFile.exists()) { Properties p = new Properties() new FileInputStream(secretPropsFile).withCloseable { is -> p.load(is) } p.each { name, value -> ext[name] = value } } else { ext["signing.keyId"] = System.getenv('SIGNING_KEY_ID') ext["signing.password"] = System.getenv('SIGNING_PASSWORD') ext["signing.secretKeyRingFile"] = System.getenv('SIGNING_SECRET_KEY_RING_FILE') ext["ossrhUsername"] = System.getenv('OSSRH_USERNAME') ext["ossrhPassword"] = System.getenv('OSSRH_PASSWORD') ext["sonatypeStagingProfileId"] = System.getenv('SONATYPE_STAGING_PROFILE_ID') } publishing { publications { release(MavenPublication) { // The coordinates of the library, being set from variables that // we'll set up later groupId module_group artifactId module_name version versions.publish_version // Two artifacts, the `aar` (or `jar`) and the sources if (project.plugins.findPlugin("com.android.library")) { artifact("$buildDir/outputs/aar/${project.getName()}-release.aar") } else { artifact("$buildDir/libs/${project.getName()}-${version}.jar") } artifact androidSourcesJar // Mostly self-explanatory metadata pom { packaging 'aar' name = module_name description = '😍 A beautiful, fluid, and extensible dialogs API for Kotlin & Android.' url = 'https://github.com/afollestad/material-dialogs' licenses { license { name = 'Apache 2.0 License' url = 'https://github.com/afollestad/material-dialogs/blob/main/LICENSE.md' } } developers { developer { id = 'afollestad' name = 'Aidan Follestad' email = 'dont-email-me@af.codes' } // Add all other devs here... } // Version control info - if you're using GitHub, follow the format as seen here scm { connection = 'scm:git:github.com/afollestad/material-dialogs.git' developerConnection = 'scm:git:ssh://github.com/afollestad/material-dialogs.git' url = 'https://github.com/afollestad/material-dialogs/tree/main' } // A slightly hacky fix so that your POM will include any transitive dependencies // that your library builds upon withXml { def dependenciesNode = asNode().appendNode('dependencies') project.configurations.implementation.allDependencies.each { def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) } } } } } // The repository to publish to, Sonatype/MavenCentral repositories { maven { // This is an arbitrary name, you may also use "mavencentral" or // any other name that's descriptive for you name = "sonatype" url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { username ossrhUsername password ossrhPassword } } } } signing { sign publishing.publications } afterEvaluate { publishReleasePublicationToSonatypeRepository.dependsOn assembleRelease }