解决 Gradle 报错:`Plugin with id ‘maven‘ not found` 在 SDK 开发中的问题

devtools/2024/11/25 7:41:33/

在 SDK 开发过程中,使用 Gradle 构建和发布 SDK 是常见的任务。在将 SDK 发布为 AAR 或 JAR 包时,你可能会使用 apply plugin: 'maven' 来发布到本地或远程的 Maven 仓库。但是,随着 Gradle 版本的更新,特别是从 Gradle 7 版本开始,原来的 maven 插件(apply plugin: 'maven')已经被弃用,导致编译时出现如下错误:

Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id 'maven' not found.

一、问题背景

Gradle 在不断升级,其插件和功能的管理也发生了很多变化。maven 插件曾是 Gradle 中发布 SDK 和库的标准插件,通常用于将 SDK 发布到本地或远程 Maven 仓库。SDK 开发人员通常会使用 apply plugin: 'maven' 来启用这个插件,然后配置发布任务。

但是,Gradle 7 版本及以上版本开始弃用了 maven 插件,改用了 maven-publish 插件。使用 Gradle 7 或更高版本时,如果继续使用 apply plugin: 'maven',就会遇到上面的错误,导致构建无法通过。


二、问题分析

Gradle 的 maven 插件与 maven-publish 插件的区别在于:

  • maven 插件:较早的 Gradle 版本(6.x 及以前)用于将构建的工件发布到 Maven 仓库。apply plugin: 'maven' 被广泛应用于 Java 项目中,但自 Gradle 7 以后,Gradle 团队建议使用更强大和灵活的 maven-publish 插件。
  • maven-publish 插件:替代了老旧的 maven 插件,提供了更多的配置选项和更好的功能支持,适用于 Gradle 7 及以上版本。

所以:问题的根本原因是:maven 插件已不再支持,必须使用 maven-publish 插件替代


三、解决方法

为了解决 Plugin with id 'maven' not found 错误,应该将 apply plugin: 'maven' 改为 apply plugin: 'maven-publish',并调整相关的发布配置。

gradle__mavenpublish__30">1. build.gradle 文件中应用 maven-publish 插件:
gradle">plugins {id 'java' // 确保应用了 Java 插件id 'maven-publish' // 使用 Maven 发布插件
}
mavenpublish__39">2. 配置 maven-publish 插件进行发布:

使用 maven-publish 插件时,发布的配置项会放在 publishing 块中。你可以将生成的 JAR 或 AAR 文件发布到本地或远程的 Maven 仓库。

gradle">publishing {publications {mavenJava(MavenPublication) {from components.java // 发布 Java 组件groupId = 'com.example.sdk'artifactId = 'my-sdk'version = '1.0.0'}}repositories {maven {// 本地存放目录(可根据需要修改)def mavenDirPath = file('D:/aar')url = uri("file://${mavenDirPath.absolutePath}")}}
}
3. 手动指定构建输出:

如果你不使用 java 插件,或者需要手动指定构建产物(例如 JAR 或 AAR 文件),可以显式定义发布的文件路径:

gradle">publishing {publications {mavenJava(MavenPublication) {artifact file('build/libs/my-sdk.jar') // 手动指定 JAR 文件groupId = 'com.example.sdk'artifactId = 'my-sdk'version = '1.0.0'}}repositories {maven {def mavenDirPath = file('D:/aar')url = uri("file://${mavenDirPath.absolutePath}")}}
}

版权所有:XuanRan
未经书面授权,禁止转载


http://www.ppmy.cn/devtools/136786.html

相关文章

用源码编译虚幻引擎,并打包到安卓平台

用源码编译虚幻引擎,并打包到安卓平台 前往我的博客,获取更优的阅读体验 作业内容: 源码编译UE5.4构建C项目,简单设置打包到安卓平台 编译虚幻 5 前置内容 这里需要将 Epic 账号和 Github 账号绑定,然后加入 Epic 邀请的组织&#xff0c…

springboot 整合 rabbitMQ (延迟队列)

前言: 延迟队列是一个内部有序的数据结构,其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间,意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之,延时队列被设计用于存放那…

输入/输出管理 III(磁盘和固态硬盘)

一、磁盘 【总结】: 磁盘(Disk)是由表面涂有磁性物质的物理盘片,通过一个称为磁头的导体线圈从磁盘存取数据。在读/写操作期间,磁头固定,磁盘在下面高速旋转。如下图所示: 磁盘盘面…

WireShark

1. WireShark安装 去官网Wireshark Download下载安装包 之后按照安装向导进行安装。安装完成后,用户可以在桌面或应用程序中找到Wireshark的图标,双击打开软件 2. wireshark过滤语法 2.1过滤协议 http 2.2 过滤指定ip 匹配指定的IP地址数据包&…

i春秋-文件包含绕过(PHP伪协议的使用)

练习平台地址 竞赛中心 题目描述 题目内容 本地包含,进行BP爆破 成功获得了数据库敏感文件(配置文件和/etc/passwd) 但是发现/etc/shadow文件无法访问,那么无法登录数据库 尝试使用PHP伪协议读取文件 php://filter/resourceflag…

DTO和VO的区别及使用场景详解

随着互联网的发展,前后端分离的开发模式越来越流行。在前后端数据交互过程中,为了保证数据的安全性和效率,通常会采用 DTO 和 VO 来封装数据。本篇博客将详细介绍 DTO 和 VO 的区别以及使用场景。 大家可能会有个疑问,既然DTO是展…

微信小程序中的WXSS与CSS的关系及使用技巧

微信小程序中的WXSS与CSS的关系及使用技巧 引言 在微信小程序的开发中,样式的设计与实现是构建用户友好界面的关键。微信小程序使用WXSS(WeiXin Style Sheets)作为其样式表语言,WXSS在语法上与CSS非常相似,但也有一些独特的特性。本文将深入探讨WXSS与CSS的关系,介绍WX…

YesBut——帮助多模态理解讽刺漫画的数据集

1.概述 源码地址:https://github.com/abhi1nandy2/yesbut_dataset 论文地址:https://arxiv.org/pdf/2409.13592.pdf 讽刺是一种幽默,它通过讽刺和夸张来批评人、社会和政治,是提出问题和鼓励批判性观点的有力工具。尤其是社交媒…