Skip to content

Gradle 7 中 'maven' 插件未找到的解决方案

问题描述

当在 Gradle 7.x 版本中尝试使用 apply plugin: 'maven' 时,会收到错误提示:"Plugin with id 'maven' not found"。这个问题在 Gradle 6.3 及更早版本中并不存在,因为 maven 插件在这些版本中是内置的。

典型的问题代码片段如下:

groovy
subprojects {
    apply plugin: 'java'
    apply plugin: 'java-library'
    apply plugin: 'maven'  // 在 Gradle 7.x 中会报错
}

根本原因

根据 Gradle 官方文档,传统 Maven 插件已在 Gradle 7.0 中被移除。这是 Gradle 团队对构建系统进行现代化改造的一部分,旨在提供更好、更一致的发布体验。

解决方案

方案一:使用 maven-publish 插件(推荐)

重要

这是 Gradle 官方推荐的标准解决方案,适用于所有新的和现有的项目。

maven 插件替换为 maven-publish 插件:

groovy
// 替换前(已废弃)
apply plugin: 'maven'

// 替换后(推荐)
apply plugin: 'maven-publish'

完整的配置示例:

groovy
plugins {
    id 'java'
    id 'java-library'
    id 'maven-publish'
}

publishing {
    publications {
        maven(MavenPublication) {
            from components.java
            // 其他发布配置
        }
    }
    
    repositories {
        maven {
            // Maven 仓库配置
            url = version.endsWith('SNAPSHOT') ? snapshotRepoUrl : releaseRepoUrl
            credentials {
                username = project.findProperty('mavenUser')
                password = project.findProperty('mavenPassword')
            }
        }
    }
}

方案二:降级 Gradle 版本(临时方案)

注意

这只是一个临时解决方案,不建议长期使用,因为您将无法享受 Gradle 7.x 的新特性和性能改进。

如果您暂时无法迁移到 maven-publish 插件,可以将 Gradle 版本降级到 6.x:

  1. 修改 gradle-wrapper.properties 文件:
properties
# 将版本改为 6.9.4(或任何 6.x 版本)
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.4-bin.zip
  1. 使用 Gradle Wrapper 执行构建:
bash
# Linux/macOS
./gradlew clean build

# Windows
gradlew.bat clean build

在 Android Studio 中,您还可以通过以下步骤修改 Gradle 版本:

  1. 打开 File → Project Structure
  2. 设置:
    • Android Gradle Plugin Version: 4.2.2
    • Gradle Version: 6.7.1

迁移指南

如果您决定从 maven 迁移到 maven-publish 插件,以下是一些关键差异:

功能Maven 插件Maven-Publish 插件
发布配置uploadArchives 任务publishing 配置块
仓库定义repositories 块中配置publishing.repositories 中配置
发布物定义artifactspublishing.publications
认证方式直接在仓库 URL 中配置使用 credentials

总结

Gradle 7.x 中移除了传统的 maven 插件,这是构建系统现代化的一部分。建议所有开发者迁移到 maven-publish 插件,它提供了更强大、更灵活的发布功能,并且是 Gradle 项目未来的标准方向。

虽然降级 Gradle 版本是一个可行的临时解决方案,但从长远来看,迁移到 maven-publish 插件是确保项目兼容性和可维护性的最佳选择。