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

发布于:2024-12-18 ⋅ 阅读:(63) ⋅ 点赞:(0)

在 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',并调整相关的发布配置。

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

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

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 文件),可以显式定义发布的文件路径:

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
未经书面授权,禁止转载


网站公告

今日签到

点亮在社区的每一天
去签到