Gradle升级到7后,找不到类型为org.gradle.API.DefaultTask的方法pom()

8ljdwjyq  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在将gradle从2.6升级到7.0,升级后我收到此错误
找不到org. grale. api. DefaultTask类型任务上参数的方法pom().
在我删除了应用插件之后:'maven'被弃用并替换为'maven-publish'
我试图在mavel-publish中找到pom方法的替代品,但没有成功

task createPomFiles {
    pom {
        project {
            groupId groupId
            artifactId 'generic-connector'
            version version
        }
    }.writeTo("$project.buildDir/resources/../pom.xml")
}

字符串
标签:How to make gradle generate a valid pom.xml file at the root of a project for maven users?

9jyewag0

9jyewag01#

要为您的Gradle 7.0+项目生成pom.xml文件,我建议您执行以下步骤:

1.在插件声明中添加maven-publish

我想你已经这么做了,但作为参考:

plugins {
    id 'java'
    id 'maven-publish'
}

字符串

2.定义发布

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            groupId = 'com.github.tcsizmadia'
            artifactId = 'gradle-sandbox'
            version = '1.0-SNAPSHOT'

            pom {
                name = 'Gradle Sandbox'
                description = 'Sandbox Project for Gradle Builds'
            }
        }
    }
}


请确保根据您的需要自定义(groupIdartifactId等)。

3.创建一个任务到pumpom.xml(可选)

作为一个 nice to have 特性,您可以添加一个任务来重命名和复制生成的pom.xml文件。

tasks.register('renamePom') {
    doLast {
        def pomFile = file("${layout.buildDirectory.get().asFile}/publications/mavenJava/pom-default.xml")
        if (pomFile.exists()) {
            def newPomFile = file("${layout.buildDirectory.get().asFile}/resources/main/META-INF/maven/pom.xml")
            newPomFile.getParentFile().mkdirs()
            pomFile.renameTo(newPomFile)
        }
    }
}


在这里,我指定了一个任务,将默认的build//publications/mavenJava/pom-default.xml复制到build/pom.xml

4.生成pom.xml完成Build

这不是强制性的,但如果您希望在构建时生成pom.xml,请将以下内容附加到build.gradle文件中:

generatePomFileForMavenJavaPublication.finalizedBy(renamePom)
build.finalizedBy generatePomFileForMavenJavaPublication


如果跳过此步骤,您可以为您的项目发布生成pom.xml:

./gradlew generatePomFileForMavenJavaPublication

一个极简的完整示例

plugins {
    id 'java'
    id 'maven-publish'
}

group = 'com.github.tcsizmadia'
version = '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}

test {
    useJUnitPlatform()
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            groupId = 'com.github.tcsizmadia'
            artifactId = 'gradle-sandbox'
            version = '1.0-SNAPSHOT'

            pom {
                name = 'Gradle Sandbox'
                description = 'Sandbox Project for Gradle Builds'
            }
        }
    }
}

tasks.register('renamePom') {
    doLast {
        def pomFile = file("${layout.buildDirectory.get().asFile}/publications/mavenJava/pom-default.xml")
        if (pomFile.exists()) {
            def newPomFile = file("${layout.buildDirectory.get().asFile}/resources/main/META-INF/maven/pom.xml")
            newPomFile.getParentFile().mkdirs()
            pomFile.renameTo(newPomFile)
        }
    }
}

generatePomFileForMavenJavaPublication.finalizedBy(renamePom)
build.finalizedBy generatePomFileForMavenJavaPublication

相关问题