Gradle 7における 'maven' プラグインが見つからない問題の解決方法
問題の概要
Gradle 7.xを使用している際に、以下のようなエラーが発生することがあります:
Plugin with id 'maven' not found.
このエラーは、build.gradle
ファイル内でレガシーなMavenプラグインを適用しようとしたときに発生します:
subprojects {
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'maven' // ここでエラーが発生
}
原因
Gradle 7.0でレガシーなMavenプラグインが廃止されました。この変更はGradleの公式アップグレードガイドで明記されており、新しいプロジェクト構造と公開メカニズムに移行するための措置です。
重要
Gradle 7.x以降では、maven
プラグインはバンドルされていません。代わりにmaven-publish
プラグインを使用する必要があります。
解決方法
方法1: maven-publishプラグインへの置き換え(推奨)
最も簡単で推奨される解決策は、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
}
}
}
方法2: Gradleバージョンのダウングレード(一時的な対策)
どうしても古いプラグインを使用する必要がある場合、Gradleのバージョンを6.x系に戻す方法もあります:
gradle-wrapper.properties
ファイルを開く- Gradleバージョンを6.7.1などに変更:
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
注意
この方法は一時的な対策であり、長期的にはmaven-publish
への移行を推奨します。古いバージョンのGradleを使用すると、セキュリティアップデートや新機能が利用できなくなります。
maven-publishプラグインの基本的な使用方法
maven-publish
プラグインはより近代的なAPIを提供します:
plugins {
id 'java'
id 'maven-publish'
}
group = 'com.example'
version = '1.0.0'
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
// カスタム設定
artifactId = 'my-library'
versionMapping {
usage('java-api') {
fromResolutionOf('runtimeClasspath')
}
usage('java-runtime') {
fromResolutionResult()
}
}
}
}
repositories {
maven {
// Mavenリポジトリの設定
url = layout.buildDirectory.dir('repo')
}
}
}
移行時の考慮事項
タスク名の変更:
uploadArchives
→publish
install
タスクは廃止されました
設定の違い:
- 新しいプラグインでは
publishing
ブロックを使用します - 公開設定がより明示的になりました
- 新しいプラグインでは
互換性:
maven-publish
はMavenセントラルリポジトリとの互換性を維持しています
まとめ
Gradle 7.xではレガシーなmaven
プラグインが廃止されたため、Plugin with id 'maven' not found
エラーが発生します。この問題を解決するには:
- 推奨:
maven-publish
プラグインに移行する - 一時的対策: Gradleバージョンを6.xにダウングレードする
新しいmaven-publish
プラグインはより柔軟で近代的な公開機能を提供するため、長期的には移行を推奨します。