publishing.gradle
//[Publishing a project as module (gradle.org)](https://docs.gradle.org/current/userguide/publishing_setup.html)
apply plugin: 'maven-publish'
def libraryName = "moduleName"
//task sourceJar(type: Jar) {
// from android.sourceSets.main.java.srcDirs
// classifier 'sources'
//}
task mappingZipTask(type: Zip) {
archiveFileName = "mapping.zip"
destinationDirectory = file("$buildDir/outputs/mapping/")
from "$buildDir/outputs/mapping/release/"
}
afterEvaluate {
publishAarDebugPublicationToLocalMavenRepository.dependsOn(":$libraryName:assembleDebug")
publishAarDebugPublicationToLocalMavenRepository.mustRunAfter(":$libraryName:assembleDebug")
mappingZipTask.dependsOn(":$libraryName:assembleRelease")
mappingZipTask.mustRunAfter(":$libraryName:assembleRelease")
publishAarReleasePublicationToLocalMavenRepository.dependsOn(mappingZipTask)
publishAarReleasePublicationToLocalMavenRepository.mustRunAfter(mappingZipTask)
}
publishing {
publications {
aarDebug(MavenPublication) {
startPublish(it, "debug")
}
aarRelease(MavenPublication) {
startPublish(it, "release")
}
}
repositories {
maven {
name "localMaven"
url "file://$buildDir/outputs/xxxAndroidProject/Local"
}
maven {
name "debugMaven"
url "${getArtifactoryRepo()}"
credentials {
username "${getCredentialsUserName()}"
password "${getCredentialsPassword()}"
}
}
maven {
name "releaseMaven"
url "${getArtifactoryRepo()}"
credentials {
username "${getCredentialsUserName()}"
password "${getCredentialsPassword()}"
}
}
}
}
def startPublish(MavenPublication mavenPublication, String buildType) {
def versionName = rootProject.ext.versionName
def publishNumber = getBuildNumber()
def buildName = buildAARName(versionName, buildType)
mavenPublication.groupId 'com.company'
mavenPublication.artifactId "xxxsdk"
mavenPublication.version "$versionName-$publishNumber"
//mavenPublication.artifact(sourceJar)
println "publishingName=$buildName"
mavenPublication.artifact("$buildDir/outputs/aar/$buildName")
/* def mappingDir = new File("$buildDir/outputs/mapping")
if (buildType == "release") {
//Only valid when actively calling publishing task.(means that it is not generating 'xxx-mapping.zip' in localMavenRepository when call assembleRelease task only.)
mavenPublication.artifact("${mappingDir}/mapping.zip")
}*/
def subModules = [":conversationSDK:baseUI", ":conversationSDK:chatUIkit", ":conversationSDK:agent", ":conversationSDK:imagePicker",":conversationSDK:basicBuilt"]
def set = new HashSet<>()
mavenPublication.pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
subModules.each {
project(it).configurations.implementation.allDependencies.each {
if (it.group != null && (it.name != null && "unspecified" != it.name) && (it.version != null && "unspecified" != it.version)) {
String willAddDependency = "${it.group}${it.name}${it.version}"
if (!set.contains(willAddDependency)) {
set.add(willAddDependency)
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
}
// build an aar name which will be in output folder
// Format will be conversationSDK-v1.0.0-50-debug.aar
def buildAARName(String versionName, String buildType) {
def name = "conversationSDK"
// add version name from defaultConfig
name += "-v" + versionName
// add version code from defaultConfig
name += "-" + getBuildNumber()
name += "-" + buildType + ".aar"
return name
}
String getBuildNumber() {
ext.env = System.getenv()
def number = env.BUILD_NUMBER
if (number == null) {
// It's a developer build, the number can be int or String here
number = rootProject.ext.defaultBuildNumber
}
return number
}
String getCredentialsUserName() {
ext.env = System.getenv()
def userName = env.REPO_USERNAME
if (userName == null) {
userName = "nullName"
}
return userName
}
String getCredentialsPassword() {
ext.env = System.getenv()
def password = env.REPO_PASSWORD
if (password == null) {
password = "nullPassword"
}
return password
}
String getArtifactoryRepo() {
ext.env = System.getenv()
def repo = env.REPO_PATH
if (repo == null) {
repo = "nullRepo"
}
return repo
}
/*publishing {
publications {
aar(MavenPublication) {
def runTasks = gradle.startParameter.taskNames
println "runTasks $runTasks"
if (runTasks != null && runTasks.size > 0) {
for (i in 0..<runTasks.size) {
def task = runTasks[i]
if (task.contains("Debug")) {
println "runTasks into path1"
startPublish(it, "debug")
break
} else if (task.contains("Release")) {
println "runTasks into path2"
startPublish(it, "release")
break
}
}
println "runTasks into path3"
}
}
}
}*/
网友评论