Skip to content

Gradle 7における 'maven' プラグインが見つからない問題の解決方法

問題の概要

Gradle 7.xを使用している際に、以下のようなエラーが発生することがあります:

Plugin with id 'maven' not found.

このエラーは、build.gradleファイル内でレガシーなMavenプラグインを適用しようとしたときに発生します:

groovy
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プラグインへの置き換え(推奨)

最も簡単で推奨される解決策は、mavenmaven-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
        }
    }
}

方法2: Gradleバージョンのダウングレード(一時的な対策)

どうしても古いプラグインを使用する必要がある場合、Gradleのバージョンを6.x系に戻す方法もあります:

  1. gradle-wrapper.propertiesファイルを開く
  2. Gradleバージョンを6.7.1などに変更:
properties
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip

注意

この方法は一時的な対策であり、長期的にはmaven-publishへの移行を推奨します。古いバージョンのGradleを使用すると、セキュリティアップデートや新機能が利用できなくなります。

maven-publishプラグインの基本的な使用方法

maven-publishプラグインはより近代的なAPIを提供します:

groovy
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')
        }
    }
}

移行時の考慮事項

  1. タスク名の変更:

    • uploadArchivespublish
    • installタスクは廃止されました
  2. 設定の違い:

    • 新しいプラグインではpublishingブロックを使用します
    • 公開設定がより明示的になりました
  3. 互換性:

    • maven-publishはMavenセントラルリポジトリとの互換性を維持しています

まとめ

Gradle 7.xではレガシーなmavenプラグインが廃止されたため、Plugin with id 'maven' not foundエラーが発生します。この問題を解決するには:

  1. 推奨: maven-publishプラグインに移行する
  2. 一時的対策: Gradleバージョンを6.xにダウングレードする

新しいmaven-publishプラグインはより柔軟で近代的な公開機能を提供するため、長期的には移行を推奨します。