// pom文件中声明依赖,从而传递到使用方
            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')

完整代码示例:

apply plugin: 'maven-publish'
task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier "sources"
publishing {
    //maven配置参数
    repositories {
        maven {
            url = MAVEN_URL
            credentials {
                username MAVEN_USER_NAME
                password MAVEN_PWD
    publications {
        //名字可以随意,如果有多渠道,整段再下面多复制一个
        Publish(MavenPublication) {
            groupId = GROUP_ID//公司域名
            //def projectName = project.getName()
            artifactId = "hmi"//该aar包的名称
            version = VERSION//版本号
            // 必须有这个 否则不会上传AAR包
            afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
            // 必须是多渠道,需要指定aar路径
            //afterEvaluate { artifact("build/outputs/aar/app-debug.aar") }
            // 上传source,这样使用方可以看到方法注释
            artifact generateSourcesJar
            // pom文件中声明依赖,从而传递到使用方
            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 "空节点导致自定义gropid失效"
                        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')

前后pom对比

未做依赖传递前

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.sample</groupId>
<artifactId>hmi</artifactId>
<version>0.0.005</version>
<packaging>aar</packaging>
</project>

做依赖传递后

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.sample</groupId>
<artifactId>hmi</artifactId>
<version>0.0.006</version>
<packaging>aar</packaging>
<dependencies>
<dependency>
<groupId>androidx.core</groupId>
<artifactId>core-ktx</artifactId>
<version>1.8.0</version>
<scope>implementation</scope>
</dependency>
<dependency>
<groupId>androidx.appcompat</groupId>
<artifactId>appcompat</artifactId>
<version>1.3.0</version>
<scope>implementation</scope>
</dependency>
<dependency>
<groupId>com.google.android.material</groupId>
<artifactId>material</artifactId>
<version>1.6.1</version>
<scope>implementation</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>1.6.21</version>
<scope>implementation</scope>
</dependency>
</dependencies>
</project>

附另外一种方式

               withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')
                    project.configurations.all { configuration ->
                        def name = configuration.name
                        if (name != "implementation" && name != "compile" && name != "api") {
                            return
                        println(configuration)
                        configuration.dependencies.each {
                            println(it)
                            if (it.name == "unspecified" || it.version == 'unspecified') {
                                // 忽略无法识别的
                                return
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', it.group)
                            dependencyNode.appendNode('artifactId', it.name)
                            dependencyNode.appendNode('version', it.version)
                            if (name == "api" || name == "compile") {
                                dependencyNode.appendNode("scope", "compile")
                            } else { // implementation
                                dependencyNode.appendNode("scope", "runtime")

在此做个笔记

在上一篇文章里,已经介绍了如果搭建maven私有仓库以及各种仓库的用途。 上传aarmaven私有仓库,有两种式,一种是直接使用nexus3提供的上传功能,将aar上传到仓库。另一种是使用gradle脚本上传使用nexus3上传aar 先登录到nexus,点击Upload,选择一个仓库,如上图。 点击Browse会弹出选择文件窗口,选择要上传aar后,填写其它信息。 Extension是文件拓展名。 主要是填写Group ID、Artifact ID、Version。 这三个参数是maven对组
publications { aarSDk(MavenPublication) { artifact "build/outputs/aar/adsdk-debug.aar"
m-publish是一个Gradle插件,用于将本地library发布到Apache Maven仓库。通过使用该插件,我们可以将*.aar、*.jar等library发布到仓库中,并通过gradle或者maven进行远程依赖使用。 要使用maven-publish插件,需要在build.gradle中声明插件,并在publishing{}块中进行配置。首先,通过在plugins{}块中添加id 'maven-publish'来声明插件。然后,在publishing{}块中,可以配置group和version属性,以及定义要发布的publication和repository。 例如,通过components.java来指定要发布的library,使用mavenLocal()来指定要发布到的仓库。可以根据需要添加更多的publication和repository配置。 maven-publish插件提供了一些任务,如generatePomFileForPubNamePublication用于创建需要发布的POM文件,并填充一些已知的元数据,例如项目名称、项目版本和依赖项。publishPubNamePublicationToRepoNameRepository用于将指定publication发布到指定repository。publishPubNamePublicationToMavenLocal用于将指定publication发布复制到本地Maven缓存,包括POM文件和其他元数据。 此外,还有一些其他任务,如publish将所有定义的publication发布到所有定义的存储库的聚合任务,而publishToMavenLocal将所有定义的publication复制到本地Maven库中,包括它们的元数据。 例如,如果我们有一个名为myLibrary的publication,并将其发布mavenLocal()仓库,我们可以运行命令publishPubNamePublicationToMavenLocal来实现。 解决androidstudio新建不了aidl文件Requires setting the buildFeatures.aidl to true in the build file 节点写对了没,要在android节点下的buildFeatures节点下写 解决androidstudio新建不了aidl文件Requires setting the buildFeatures.aidl to true in the build file 同步会报错,Could not find method buildFeatures() for arguments [build 【错误记录】Android Studio 编译报错 ( Module was compiled with an incompatible version of Kotlin. The binary ) lancerXXXX: 强制使用某个版本,是不是仍然有可能编译不过 Android11 设置默认热点名称和热点密码、密码长度 宾格66: 现在推荐使用 TetheringManager这个了