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)
                }
            }
        }
     }
  }
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
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来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卡卡爾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值