使用过pom的朋友都会知道,可以通过<distributionManagement>配置多个仓库地址,在打包发布到私服时会根据版本后缀自动发布到RELEASE或SNAPSHOT仓库。
但是我今天使用Gradle 打包发布时发现,在repositories配置多个仓库地址,不会根据版本后缀发布到对应的仓库,而是两个仓库都会发布。
上网找了一下发现没有Gradle 的例子,自己尝试了一下达到了相同的效果,话不多说直接上代码
plugins {
id 'com.android.library'
id 'maven-publish'
}
//versionName="1.0.0-RELEASE"
def versionName="1.0.0-RELEASE"
android {
compileSdk 29
defaultConfig {
minSdk 19
targetSdk 29
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
//编译后执行以下任务
afterEvaluate {
//读取上传凭证,为了安全起见配置在了local.properties
//注意这里不是阿里云账号和密码,而是云效仓库账号密码,可在仓库首页设置中看到
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def userName = properties.getProperty('maven.username')
def passWord = properties.getProperty('maven.password')
//定义发布的地址,默认发布到快照库
//我这里用的阿里云效,从url就可以看出一个是snapshot一个是release
def publishUrl= "https://packages.aliyun.com/maven/repository/xxxxxxx-snapshot-xxxxxx/"
if (versionName.endsWith("RELEASE")){
publishUrl = "https://packages.aliyun.com/maven/repository/xxxxxxx-release-xxxxxx/"
}
if (versionName.endsWith("SNAPSHOT")){
publishUrl = "https://packages.aliyun.com/maven/repository/xxxxxx-snapshot-xxxxxx"
}
publishing {
publications {
push(MavenPublication) {
from components.release
groupId = 'xx.xxxx.xx'
artifactId = "xx"
version = versionName
}
}
repositories {
//发布到本地仓库
mavenLocal()
//发布到远程仓库
maven {
credentials {
username userName
password passWord
}
//远程仓库地址
url publishUrl
}
}
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.google.protobuf:protobuf-lite:3.0.1'
}
双击publishing即可进行发布