gradle从7版本到8版本发布maven仓库,发现了如下问题

Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method classifier() for arguments [sources] on task ':mouduleA:generateSourcesJar' of type org.gradle.api.tasks.bundling.Jar.

原因是gradle7和8设置项有些不一样

classifier "sources"要改成archiveClassifier.set("sources")

task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    //classifier "sources"
    archiveClassifier.set("sources")
}

全部代码如下:

apply plugin: 'maven-publish'

println "publish -->> moduleName: " + moduleName
println "publish -->> moduleVersion: " + moduleVersion
println "publish -->> moduleDescription: " + moduleDescription

task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    //classifier "sources"
    archiveClassifier.set("sources")
}

publishing {
    //maven配置参数
    repositories {
        maven {
            url  = moduleVersion.endsWith('SNAPSHOT') ? MAVEN_URL_SNAPSHOT : MAVEN_URL_RELEASE
            credentials {
                username MAVEN_USER_NAME
                password MAVEN_PWD
            }
        }
    }
    publications {
        //名字可以随意,如果有多渠道,整段再下面多复制一个
        Publish(MavenPublication) {
            groupId = GROUP_ID//公司域名
            //def projectName = project.getName()
            artifactId = moduleName//该aar包的名称
            version = moduleVersion//版本号
            // 必须有这个 否则不会上传AAR包
            afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
            // 必须是多渠道,需要指定aar路径
            //afterEvaluate { artifact("build/outputs/aar/app-debug.aar") }
            // 上传source,这样使用方可以看到方法注释
            artifact generateSourcesJar

            pom{
                description = moduleDescription
                        //'新增了功能:\n' +
                        //'      对于应用启动时长记录,\n' +
                        //'      可以上报应用启动时长\n' //project description

                // pom文件中声明依赖,从而传递到使用方
                withXml { a ->
                    def dependenciesNode = asNode().appendNode('dependencies')
                    configurations.implementation.allDependencies.each {
                        // 避免出现空节点或 artifactId=unspecified 的节点
                        if (it.group != null && (it.name != null && "unspecified" != it.name) && it.version != null) {
                            println "dependency=${it.toString()}"
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', it.group)
                            dependencyNode.appendNode('artifactId', it.name)
                            dependencyNode.appendNode('version', it.version)
                            dependencyNode.appendNode('scope', 'implementation')
                        }
                    }
                }
            }

        }
    }
}

在此记个笔记

更多推荐