publishToMavenLocal无需配置URL,因Gradle内置识别逻辑:优先读取$HOME/.m2/settings.xml中配置,未配置则默认使用$HOME/.m2/repository,与Maven完全兼容。

直接执行 ./gradlew publishToMavenLocal 就能发布到本地 Maven 仓库($HOME/.m2/repository),不需要额外配置仓库地址,也不用写 repositories { maven { ... } } 块。
为什么 publishToMavenLocal 不需要配置仓库 URL
Gradle 内置了对本地 Maven 仓库的识别逻辑:它会自动读取 $HOME/.m2/settings.xml 中的 <localrepository></localrepository> 配置;如果没找到,就默认使用 $HOME/.m2/repository。这个路径和 Maven 完全一致,所以其他项目(包括 Maven 项目)能直接引用你发布的包。
常见误区是以为必须像发布到远程那样写 repositories { maven { url = "file://..." } } —— 那其实是发布到**自定义目录**,不是标准本地仓库。
-
publishToMavenLocal是一个独立 task,不依赖publishing.repositories配置 - 它会同时发布 JAR、POM、module 文件(如果用了 Java Platform)和可选的 sources/javadoc JAR(需显式启用)
- 执行后可在
~/.m2/repository/your-group-id/your-artifact-id/下看到完整结构
publishing 块里至少要配什么才能触发 publishToMavenLocal
只要插件已启用且有 publication,publishToMavenLocal 就可用。最简有效配置如下:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
plugins {
`java-library`
`maven-publish`
}
publishing {
publications {
create<mavenpublication>("mavenJava") {
from(components["java"])
groupId = "com.example"
artifactId = "mylib"
version = "1.0.0"
}
}
}</mavenpublication>
注意点:
-
from(components["java"])必须存在,否则 publication 没内容,publishToMavenLocal会静默跳过 -
groupId/artifactId/version推荐显式声明,否则 fallback 到project.group等,容易出错 - 如果项目用了
java-library插件但没声明api或implementation依赖,生成的 POM 可能为空依赖列表,不影响发布但可能误导使用者
发布后别人引用不了?检查这三处
即使 publishToMavenLocal 执行成功,下游项目仍可能报 Could not find com.example:mylib:1.0.0:
- 下游 Gradle 项目没在
settings.gradle或build.gradle的repositories里加mavenLocal() - 下游项目用了
compileOnly或annotationProcessor引入该库,但你的 publication 没包含 sources/javadoc(虽不影响运行,但 IDE 可能无法跳转) - 本地仓库路径被覆盖:比如系统里存在
/etc/maven/settings.xml或M2_HOME/conf/settings.xml,且指定了不同<localrepository></localrepository>,Gradle 会优先用它 —— 可用./gradlew help --scan查看实际生效路径
真正麻烦的不是发布动作本身,而是 publication 的内容是否完整、坐标是否和下游引用时完全一致——多一个空格、大小写不匹配、版本号带 SNAPSHOT 但下游没开 changing = true,都会让引用失败。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










