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

如何在其他项目中应用由共享逻辑Jar生成的Gradle插件?

问题解决方案

一、核心问题分析

  1. 插件无法应用的根本原因:Gradle插件需要在构建初始化阶段被加载,而你通过implementation依赖引入的Jar是在项目构建阶段才会被加载,此时插件查找逻辑已经完成,自然找不到插件ID。
  2. 发布警告原因:你的build-logic模块同时发布了mavenJava和pluginMaven两个构件,坐标完全一致导致互相覆盖。

二、分步解决

1. 修复build-logic模块的发布配置(解决覆盖警告)

修改build-logic/build.gradle,移除重复的发布构件,只保留插件专用的发布配置:

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

// 必须配置:绑定插件ID与实现类
gradlePlugin {
    plugins {
        javaCommonConventions {
            id = 'com.test.java-common-conventions'
            implementationClass = 'com.test.JavaCommonConventionsPlugin' // 替换为你的插件实现类全路径
        }
    }
}

publishing {
    publications {
        // 移除多余的mavenJava发布(如果不需要发布普通Jar)
        // mavenJava(MavenPublication) {
        //     from components.java
        // }
        
        // 保留插件专用的发布
        pluginMaven(MavenPublication) {
            from components.java
        }
    }
    repositories {
        mavenLocal()
    }
}

执行重新发布命令:

./gradlew :build-logic:publishToMavenLocal

2. 配置消费项目的插件查找逻辑

在消费项目的settings.gradle中添加pluginManagement块,让Gradle在初始化阶段就能从本地Maven仓库找到插件:

pluginManagement {
    repositories {
        gradlePluginPortal() // 保留官方插件仓库
        mavenLocal() // 新增本地Maven仓库,用于查找自定义插件
    }
    
    // 可选:提前配置插件版本,避免在build.gradle中重复写版本
    plugins {
        id 'com.test.java-common-conventions' version '1.0.0'
    }
}

rootProject.name = '你的消费项目名称'

3. 调整消费项目的build.gradle

移除不必要的implementation依赖(如果只是用插件而非Jar中的普通类),直接应用插件:

plugins {
    id 'java'
    id 'io.spring.dependency-management'
    id "org.openapi.generator"
    id "openapi-gen"
    id "com.test.java-common-conventions" // 现在可以正常找到
    id 'dependencies'
}

dependencies {
    constraints {
        implementation lib.apacheTextCommons
        implementation(lib.spring_boot_starter_web)
    }
    implementation lib.spring_boot_starter_web
    testImplementation lib.spring_boot_starter_test
    implementation lib.jackson_databind
    implementation lib.openApiGradlePlugin
    // 如果不需要使用Jar中的普通工具类,删除下面这行
    // implementation "com.test.build-logic:spring-base-starter-build-logic:1.0.0"
    implementation lib.javaxValidator
    implementation lib.javaxAnnotation
    implementation lib.swaggerAnnotation
    integrationTestImplementation lib.junitJupiterEngine
    integrationTestImplementation lib.junitJupiterApi
}

4. 额外检查点

  • 确认插件实现类的包名、类名与gradlePlugin块中的配置完全一致
  • 检查错误日志中的插件ID拼写:你配置的是com.test.java-common-conventions,但错误中出现了com.meili.java-application-conventions,需确认是否存在笔误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:34:58