最近更新到android studio 2020.3.1之后,發現變化挺大的,默認gradle都變成了7.0.2,我直接升級到最近版gradle7.1,突然發現之前6.9來創建maven庫的方法沒法用了,jitpack.io也不能在線編譯了,提交maven中央倉庫變化也很大,提交最新的私服nexus3上面,變化還是較小的,
gradle7.0之前的方法,請參考這位大佬,↓
Android庫發布至MavenCentral流程詳解
在這兒我主要寫變化后的gradle怎么配置,我也研究折騰了好久才搞定的,
直接上代碼,
1. gradle檔案配置(?C:\Users\用戶名.gradle\gradle.properties)
# MavenCentral
signing.keyId=后6位
signing.password=密碼
signing.secretKeyRingFile=../gradles/私鑰.gpg
ossrhUsername=賬號
ossrhPassword=密碼
2.在工程根目錄創建了gradles檔案夾
我把私鑰和 publish-maven.gradle 放入這個目錄的
然后在根目錄 .gitignore 添加忽略 /gradles/ (一定要忽略別把私鑰上傳到git上面了,)

3.在library工程中,最后一行加入參考
apply from: "${getRootDir().absolutePath}/gradles/publish-maven.gradle"
4.publish-maven.gradle檔案內容(直接復制稍微改一下就OK)
apply plugin: 'maven-publish'
apply plugin: 'signing'
def GROUP_ID = 'com.kotlinx'
def ARTIFACT_ID = 'yhttp'
def VERSION_NAME = '1.0.8'
def DESCRIPTION = '這兒是說明'
def GIT_LOCATION = 'github.com/yutils/yhttp'
def GIT_LOCATION_URL = 'https://'+GIT_LOCATION
//倉庫地址
def MAVEN_URL = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def nexusUsername = '賬號'
def nexusPassword = '密碼'
task sourceJar(type: Jar) {
if (hasAndroidPlugin()) {
println "======> Android"
from android.sourceSets.main.java.srcDirs
//noinspection GroovyAccessibility
archiveClassifier = 'sources'
} else if (hasJavaPlugin()) {
println "======> Java"
from sourceSets.main.allSource
//noinspection GroovyAccessibility
archiveClassifier = 'sources'
}
}
afterEvaluate { project ->
tasks.all { Task task ->
if (task.name.equalsIgnoreCase('publishAarPomPublishPublicationToSnapshotsRepository')) {
task.dependsOn tasks.getByName('assemble')
}
}
}
def hasJavaPlugin() {
if (plugins.hasPlugin("java-library")) {
return true
}
return false
}
def hasAndroidPlugin() {
if (plugins.hasPlugin("com.android.library")) {
return true
}
return false
}
publishing {
println "======> ${project.name}"
println "====> the aar path is " + "$buildDir/outputs/aar/${project.name}-release.aar"
println "====>" + MAVEN_URL
println "====>" + VERSION_NAME
publications {
aarPomPublish(MavenPublication) {
groupId GROUP_ID
artifactId ARTIFACT_ID
version VERSION_NAME
artifact(sourceJar)
artifact("$buildDir/outputs/aar/${project.name}-release.aar")
pom {
packaging 'aar'
name = ARTIFACT_ID
description = DESCRIPTION
url = GIT_LOCATION_URL
licenses {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = 'yujing'
name = 'yujing'
email = '85161441@qq.com'
}
}
scm {
connection = 'scm:git:'+GIT_LOCATION+'.git'
developerConnection = 'scm:git:ssh://'+GIT_LOCATION+'.git'
url = GIT_LOCATION_URL
}
}
pom.withXml {
//asNode().appendNode('測驗').appendNode('自定義key', '自定義value')
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each {
if (it.version != "unspecified") { // 過濾專案內library參考
println "=====>" + it.properties
println "=====>" + it.group + " " + it.name + it.version
if (it.group == null || it.name == null || it.version == null) return
if (it.group == group) return
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
if (it.excludeRules.size() > 0) {
def exclusionsNode = dependencyNode.appendNode('exclusions')
it.excludeRules.each { rule ->
def exclusionNode = exclusionsNode.appendNode('exclusion')
exclusionNode.appendNode('groupId', rule.group)
exclusionNode.appendNode('artifactId', rule.module)
}
}
}
}
}
}
}
repositories {
maven {
name "snapshots"
url MAVEN_URL
credentials {
username = nexusUsername
password = nexusPassword
}
}
}
}
// signing 必須在 publishing 配置之后
signing {
sign publishing.publications.aarPomPublish
}
5.發布
雙擊直接到maven庫,后續就不贅述了,

如果你的android studio 沒有這個gradle Tasks 選項


1.取消這個勾勾,
2.再同步一下就出來了,
這是我的github地址
https://github.com/yutils
這是安卓官方說明
https://developer.android.com/studio/build/maven-publish-plugin
這是gradle官方說明
https://docs.gradle.org/current/userguide/publishing_maven.html
研究不易,希望大家給我點個關注之類的
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/291511.html
標籤:其他
上一篇:SwiftUI Swift 問答之如何在橫向的安全區域中設定 SwiftUI 串列標題的背景顏色?
下一篇:Android 面試匯總
