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

Gradle publishToMavenLocal报错Invalid publication 'maven'

Gradle 7.2 发布依赖到本地Maven仓库报artifact不存在问题修复

问题场景

  • 运行环境:Java 11、Gradle 7.2
  • 需求:构建可复用Java依赖库,最终发布到公共Maven仓库供其他项目引用,当前阶段先完成本地.m2仓库的发布验证
  • 项目目录结构:
mylib/
  lib/
    src/
    build.gradle
  • 原lib模块build.gradle配置:
plugins {
  id 'java-library'
  id 'maven-publish'
  id 'io.freefair.lombok' version "6.5.0-rc1"
}

sourceCompatibility = 1.11
targetCompatibility = 1.11
archivesBaseName = 'mylib'
version = '1.0.0-RC1'
group = 'org.example'

repositories {
  mavenCentral()
}

dependencies {
  // 省略其余依赖
)

testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
}

publishing {
  publications {
      maven(MavenPublication) {
        artifact("build/libs/${archivesBaseName}-${version}.jar") {
        extension 'jar'
      }
    }
  }
}

tasks.named('test') {
  useJUnitPlatform()
}

publishToMavenLocal.configure {
  mustRunAfter build
}
  • 报错现象:执行./gradlew clean build publishToMavenLocal时构建失败,核心报错信息:

Invalid publication 'maven': artifact file does not exist
提示路径/Users/myuser/workspace/mylib/lib/build/libs/mylib-1.0.0-RC1.jar不存在。即便命令行指定了任务顺序、脚本中配置了publishToMavenLocal必须在build任务后运行,实际执行时发布任务逻辑仍先于jar包生成执行,多次调整顺序配置均未解决。

根因说明

  1. 配置存在基础语法错误:dependencies块中注释行后的闭合符错误写为圆括号),正确应为花括号},会直接导致构建脚本解析异常。
  2. 硬编码产物路径的写法会触发Gradle配置阶段校验:传入build/libs/xxx.jar这类硬编码文件路径时,Gradle在脚本配置阶段就会检查该文件是否存在,这个阶段还没进入任务执行流程,不管怎么配置任务执行顺序,配置期找不到文件就会直接报错。
  3. mustRunAfter是弱顺序约束,不会建立强依赖:该规则仅在两个任务都被纳入执行计划时才调整执行顺序,本身不会触发前置任务执行,也无法解决配置阶段的文件校验问题。

修复方案

直接修改build.gradle为如下配置即可:

plugins {
  id 'java-library'
  id 'maven-publish'
  id 'io.freefair.lombok' version "6.5.0-rc1"
}

sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
archivesBaseName = 'mylib'
version = '1.0.0-RC1'
group = 'org.example'

repositories {
  mavenCentral()
}

dependencies {
  // 省略其余依赖
  testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
}

publishing {
  publications {
    maven(MavenPublication) {
      // 直接引用jar任务作为发布产物,自动建立任务依赖,无需硬编码路径
      artifact jar
      // 若需要发布源码包、javadoc包,补充对应任务引用即可,依赖会自动处理
      // artifact sourcesJar
      // artifact javadocJar
    }
  }
}

tasks.named('test') {
  useJUnitPlatform()
}

// 删除原有的publishToMavenLocal顺序配置,任务隐式依赖会自动保证执行顺序

修改完成后直接执行./gradlew clean publishToMavenLocal即可完成本地发布,不需要手动在命令行追加build任务,maven-publish插件会自动按顺序执行编译、测试、打包、发布流程,不会再出现找不到jar包的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:21:29