You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle插件发布至MavenLocal后无法被识别的问题求助

问题原因分析

你遇到的核心问题是插件标记(Plugin Marker Artifact)版本不匹配:

  • Gradle的plugins DSL引用插件时,需要一个特殊的"标记构件"(artifactId格式为[插件ID].gradle.plugin)来定位实际的插件JAR。
  • 你手动在publishing块指定了版本1.1,但项目本身未设置统一的version,导致java-gradle-plugin自动生成的插件标记版本为默认的unspecified,和你引用的1.1版本不匹配,因此Gradle找不到对应版本的插件标记。
解决方案

步骤1:修正插件项目的build.gradle

修改插件项目的构建配置,确保项目版本统一,同时让发布配置继承项目的group/version:

plugins {
    id 'java-gradle-plugin'
    id 'groovy'
    id 'maven-publish'
}

// 统一设置项目的group和version,替代手动在publishing块中指定
group 'com.foo.bar'
version '1.1'

repositories {
    jcenter()
}

dependencies {
    testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
}

gradlePlugin {
    plugins {
        greeting {
            id = 'com.foo.bar.greeting'
            implementationClass = 'com.foo.bar.FooBarPlugin'
        }
    }
}

// 省略功能测试相关配置...

publishing {
    publications {
        maven(MavenPublication) {
            from components.java
            // 无需手动指定groupId/artifactId/version,自动继承项目的group/name/version
        }
    }
}

步骤2:清理本地Maven仓库的旧构件

删除之前生成的不匹配版本的文件,避免干扰:

rm -rf ~/.m2/repository/com/foo/bar/greeting
rm -rf ~/.m2/repository/com/foo/bar/com.foo.bar.greeting.gradle.plugin

步骤3:重新发布插件到本地仓库

执行发布命令:

./gradlew clean publishToMavenLocal

此时检查本地仓库,会看到com/foo/bar/com.foo.bar.greeting.gradle.plugin/1.1/目录,里面包含对应版本的插件标记POM文件。

步骤4:重新引用插件

在Java应用项目的build.gradle中保持原引用配置不变:

plugins {
    id 'application'
    id 'com.foo.bar.greeting' version '1.1'
}

再次执行./gradlew tasks即可正常识别插件。

内容的提问来源于stack exchange,提问作者18446744073709551615

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:08:09