Gradle从2.6升级到7.0后报错:找不到pom()方法
Gradle 2.6升级到7.0后pom()方法报错的解决办法
问题说明
将Gradle从2.6版本升级到7.0后,执行自定义Task时出现报错:Could not find method pom() for arguments ... on task of type org.gradle.api.DefaultTask。已经替换了废弃的apply plugin: 'maven'为maven-publish插件,但找不到原代码中pom()方法的替代方案,原代码如下:
task createPomFiles { pom { project { groupId groupId artifactId 'generic-connector' version version } }.writeTo("$project.buildDir/resources/../pom.xml") }
解决步骤
在maven-publish插件体系中,不能像旧版maven插件那样直接在自定义Task里调用pom()方法,需要通过配置发布任务(publication)来定义POM内容,再导出到指定位置,具体操作如下:
- 确认已应用
maven-publish插件
plugins { id 'maven-publish' }
- 配置Maven发布的Publication,定义POM核心信息
publishing { publications { maven(MavenPublication) { // 配置POM的基本坐标 groupId = groupId artifactId = 'generic-connector' version = version // 可选:扩展POM的其他信息(如名称、描述、开发者等) pom { name = '通用连接器项目' description = '用于对接第三方服务的通用连接器' // 可继续添加license、developers等节点 } } } }
- 自定义Task导出POM到指定路径
task createPomFiles { doLast { // 获取配置好的maven publication对应的POM对象 def targetPom = publishing.publications.maven.pom // 将POM写入目标路径 targetPom.writeTo("$project.buildDir/resources/../pom.xml") } }
执行./gradlew createPomFiles即可生成指定路径的POM文件,解决方法不存在的报错。
如果只是想为Maven用户生成标准POM文件,也可以直接运行Gradle内置任务:./gradlew generatePomFileForMavenPublication,生成的POM会自动保存在build/publications/maven目录下,无需自定义Task。
内容的提问来源于stack exchange,提问作者Ioana Teodora Jipa
相关产品推荐
相关产品推荐

