Gradle 7 中 'maven' 插件未找到的解决方案
问题描述
当在 Gradle 7.x 版本中尝试使用 apply plugin: 'maven'
时,会收到错误提示:"Plugin with id 'maven' not found"。这个问题在 Gradle 6.3 及更早版本中并不存在,因为 maven
插件在这些版本中是内置的。
典型的问题代码片段如下:
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
插件:
// 替换前(已废弃)
apply plugin: 'maven'
// 替换后(推荐)
apply plugin: 'maven-publish'
完整的配置示例:
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:
- 修改
gradle-wrapper.properties
文件:
# 将版本改为 6.9.4(或任何 6.x 版本)
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.4-bin.zip
- 使用 Gradle Wrapper 执行构建:
# Linux/macOS
./gradlew clean build
# Windows
gradlew.bat clean build
在 Android Studio 中,您还可以通过以下步骤修改 Gradle 版本:
- 打开 File → Project Structure
- 设置:
- Android Gradle Plugin Version: 4.2.2
- Gradle Version: 6.7.1
迁移指南
如果您决定从 maven
迁移到 maven-publish
插件,以下是一些关键差异:
功能 | Maven 插件 | Maven-Publish 插件 |
---|---|---|
发布配置 | uploadArchives 任务 | publishing 配置块 |
仓库定义 | repositories 块中配置 | publishing.repositories 中配置 |
发布物定义 | artifacts 块 | publishing.publications 块 |
认证方式 | 直接在仓库 URL 中配置 | 使用 credentials 块 |
总结
Gradle 7.x 中移除了传统的 maven
插件,这是构建系统现代化的一部分。建议所有开发者迁移到 maven-publish
插件,它提供了更强大、更灵活的发布功能,并且是 Gradle 项目未来的标准方向。
虽然降级 Gradle 版本是一个可行的临时解决方案,但从长远来看,迁移到 maven-publish
插件是确保项目兼容性和可维护性的最佳选择。