Java项目中自定义Gradle插件并发布到企业仓库的核心步骤是三步:编写实现Plugin接口的插件类、配置build.gradle启用gradle-plugin和maven-publish插件、执行./gradlew publish上传至Nexus/Artifactory。

在 Java 项目中,用 Gradle 编写自定义 Plugin 并发布到企业内部仓库(如 Nexus 或 Artifactory),核心是三步:编写 Plugin 实现、配置构建脚本使其可发布、将产物上传到私有仓库。下面分关键环节说明。
编写自定义 Plugin 类
Plugin 必须实现 org.gradle.api.Plugin 接口,推荐使用 Kotlin 或 Java 编写(Kotlin 更简洁)。通常放在独立的 Gradle 模块中(如 my-company-gradle-plugin)。
示例(Java):
public class GreetingPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
// 注册一个自定义 task
project.getTasks().register("sayHello", GreetingTask.class);
}
}
public abstract class GreetingTask extends DefaultTask {
@TaskAction
public void greet() {
getLogger().lifecycle("Hello from custom plugin!");
}
}
注意:Plugin 类需有无参构造函数;若需参数化,应通过 Extension(扩展)暴露配置项。
立即学习“Java免费学习笔记(深入)”;
配置插件模块的 build.gradle
该模块本身要能被构建为 jar,并声明插件 ID 和元数据。推荐使用 Gradle Plugin Development Plugin(内置)简化流程:
- 在
build.gradle中应用插件:plugins { id 'java-gradle-plugin' } - 声明插件 ID 和实现类:
gradlePlugin { plugins { greeting { id = 'com.mycompany.greeting'; implementationClass = 'com.mycompany.GreetingPlugin' } } } - 添加必要依赖(如
gradleApi()、localGroovy()) - 确保
src/main/resources/META-INF/gradle-plugins/com.mycompany.greeting.properties存在,内容为:implementation-class=com.mycompany.GreetingPlugin
配置发布到企业仓库
使用 maven-publish 插件 + 企业仓库地址 + 认证信息:
- 应用插件:
plugins { id 'maven-publish' } - 配置
publishing { repositories { maven { url = "https://nexus.mycompany.com/repository/maven-releases/" } } } - 提供凭证(不硬编码):
./gradle.properties中设nexusUsername=xxx和nexusPassword=yyy,然后在 build.gradle 中引用:credentials { username = project.findProperty("nexusUsername") ?: "" password = project.findProperty("nexusPassword") ?: "" } - 确保
group(如com.mycompany)、version(如1.0.0)已设置,它们决定最终坐标com.mycompany:my-company-gradle-plugin:1.0.0
执行 ./gradlew publish 即可上传 jar、pom、module 文件到私有仓库。
在其他项目中使用该插件
发布成功后,在目标项目的 settings.gradle 或 settings.gradle.kts 中声明仓库:
pluginManagement {
repositories {
maven { url = "https://nexus.mycompany.com/repository/maven-releases/" }
gradlePluginPortal() // 可选,保留默认源
}
}
然后在 build.gradle 中应用:
plugins {
id("com.mycompany.greeting") version "1.0.0" apply false
}
// 或在子项目中启用
apply(plugin = "com.mycompany.greeting")
注意:若插件未发布到公开源,必须在 pluginManagement 块中显式配置私有仓库,否则解析失败。


















