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

Gradle 7.4.2构建应用报publishing()方法无签名错误咨询

Gradle 7.4.2 配置maven-publish发布到Nexus时报找不到publishing方法的解决方案

问题背景

跟随教程学习将制品发布到Nexus的操作,以简单Spring Boot Java应用为演示案例,自定义修改build.gradle配置后执行构建命令报错,当前使用Gradle版本为7.4.2。
修改后的原始配置如下:

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.2.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}

group 'com.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

apply plugin: 'maven-publish'

publishing {
    publications {
        maven(MavenPublication) {
            artifacts("build/libs/my-app-$version"+".jar") {
                extension = 'jar'
            }
        }   
    }

    repositories {
        maven {
            name'nexus'
            url "http://someip:someport/repository/maven-snapshots/"
            credentials {
                username project.repoUser
                password project.repoPassword
            }
        }
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '5.2'
    testImplementation group: 'junit', name: 'junit', version: '4.12'
}

执行构建时抛出的报错信息:

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/matteo/Desktop/devops_bootcamp/java-app/build.gradle' line: 14

* What went wrong:
A problem occurred evaluating root project 'my-app'.
> No signature of method: build_49q3y83g7hdxe5s51k5187z33.publishing() is applicable for argument types: (build_49q3y83g7hdxe5s51k5187z33$_run_closure1) values: [build_49q3y83g7hdxe5s51k5187z33$_run_closure1@79692f52]

故障原因

这个报错是Gradle版本和插件声明语法不兼容导致的:

  • Gradle 7.0及以上版本调整了插件扩展的注册逻辑,maven-publish这类官方核心插件如果使用旧式apply plugin语法在plugins块外部声明,插件提供的publishing配置闭包不会被正确注入到构建脚本上下文,Gradle解析配置时找不到对应方法,直接抛出签名不匹配错误。
  • 原配置里还存在两个兼容隐患:一是name'nexus'的属性赋值写法不符合Gradle 7的语法规范,二是手动拼接jar包路径的制品声明方式,在Spring Boot项目中容易因为任务执行顺序、包名规则变化出现找不到文件的问题。

修复方法

按以下步骤调整配置即可:

  • 删除原来plugins块外部的apply plugin: 'maven-publish'行,把maven-publish插件声明统一放到顶部plugins块内:
    plugins {
        id 'java'
        id 'org.springframework.boot' version '2.2.2.RELEASE'
        id 'io.spring.dependency-management' version '1.0.8.RELEASE'
        id 'maven-publish'
    }
    
  • 调整publishing块内的配置,补全属性赋值的等号,替换手动拼路径的制品声明为直接引用Spring Boot的jar包构建任务产出:
    publishing {
        publications {
            maven(MavenPublication) {
                artifact bootJar
            }   
        }
    
        repositories {
            maven {
                name = 'nexus'
                url "http://someip:someport/repository/maven-snapshots/"
                credentials {
                    username project.repoUser
                    password project.repoPassword
                }
            }
        }
    }
    
  • 确认和build.gradle同层级的gradle.properties文件中,已经配置好Nexus的账号密码参数:
    repoUser=你的Nexus登录用户名
    repoPassword=你的Nexus登录密码
    

验证操作

配置调整完成后,先执行./gradlew build确认项目构建无报错,再执行./gradlew publish即可将制品推送到指定的Nexus仓库。

注意:使用Gradle Wrapper执行构建时命令是./gradlew,不要直接写./gradle调用本地全局安装的Gradle,避免出现版本不一致问题。

内容的提问来源于stack exchange,提问作者matteo-g

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:45:41