Gradle Maven-Publish插件如何配置发布带有依赖的库

Gradle Maven-Publish插件如何配置发布带有依赖的库

我们先来看一个问题,不知道大家在使用Okhttp的时候有没有发现,我们引入Okhttp库后,在依赖列表中,会出现okio的库,导致我们只要在Gradle中配置了Okhttp的库,就会自动为我们下载okio的库,因为Okhttp的库依赖了okio,如图

在这里插入图片描述

这个依赖关系,我们可以在Okhttp的Pom文件里面看到,可以到Maven的库里面去查看一下https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/4.9.0/,如下图
在这里插入图片描述

查看Pom文件中,发现配置了dependencies的标签,所以会有这个依赖关系存在

在这里插入图片描述

既然我们知道了怎么一回事,那只要往我们的Gradle里面Maven上传脚本也添加这个不就好了吗?到这里,问题出现了,去Gradle官方文档查看maven插件的API,你会发现,竟然没有如何添加dependencies结点的方法,https://docs.gradle.org/current/dsl/org.gradle.api.publish.maven.MavenPom.html

,但是好在为我们提供了另一种方法withXml,我们看一下这个方法

在这里插入图片描述

我们再来看一下这个例子里面的asNode方法,从官方API找到该方法的说明

在这里插入图片描述

asNode方法能够返回一个当前的pom的Groovy结点,这样我们就可以操作这个结点了,我们可以像下面这样,添加一个依赖库,在maven标签里面添加pom.withXml方法,publish完整脚本可以查看我的这篇文章:https://blog.csdn.net/xiaozeiqwe/article/details/117379335

publishing {
    publications {
        maven(MavenPublication) {
            groupId GROUP_ID
            artifactId ARTIFACT_ID
            version VERSION_NAME
            pom {
                ............
            }
			pom.withXml {
			    def dependenciesNode = asNode().appendNode('dependencies')
			    def dependencyNode = dependenciesNode.appendNode('dependency')
			    dependencyNode.appendNode('groupId', 'com.squareup.okhttp3')
			    dependencyNode.appendNode('artifactId', 'okhttp')
			    dependencyNode.appendNode('version', '4.9.0')
			}
        }
    }
}



我们还可以依靠Gradle的dependencies依赖关系来批量处理添加我们的Maven Publish结点,并且还能添加exclusion选项

pom.withXml {
    def dependenciesNode = asNode().appendNode('dependencies')
    configurations.implementation.allDependencies.withType(ModuleDependency) { ModuleDependency dp -> if (dp.version != "unspecified") { // 过滤项目内library引用
        if("com.squareup.okhttp3" == dp.group){
            def dependencyNode = dependenciesNode.appendNode('dependency')
            dependencyNode.appendNode('groupId', dp.group)
            dependencyNode.appendNode('artifactId', dp.name)
            dependencyNode.appendNode('version', dp.version)
            // for exclusions
            if (dp.excludeRules.size() > 0) {
                def exclusions = dependencyNode.appendNode('exclusions')
                dp.excludeRules.each { ExcludeRule ex ->
                    def exclusion = exclusions.appendNode('exclusion')
                    exclusion.appendNode('groupId', ex.group)
                    exclusion.appendNode('artifactId', ex.module)
                }
            }
        }
     }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡卡爾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值