Generate pom.xml in jar with gradle



我想用Intellij/gradle生成一个带有pom.xml内部的jar,以便在另一个项目中使用它。我尝试了build.gradle的以下代码:

group 'com.test'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'maven-publish'
sourceCompatibility = 1.5
repositories {
    mavenCentral()
}
jar {
    into("META-INF/maven/$project.group/$project.name") {
        from generatePomFileForMavenJavaPublication
        rename ".*", "pom.xml"
    }
}
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile group: 'postgresql', name: 'postgresql', version: '9.1-901.jdbc4'
}

但是我正在遵循错误:

'jar' cannot be applied to '(groovy.lang.closure <org.gradle.api.tasks.bundling.AbstractArchiveTask> )'

和gradle说:

Could not find property 'generatePomFileForMavenJavaPublication' on
task ':jar'.

或者有人知道另一种方法?

任务 generatePomFileForMavenJavaPublication是在配置阶段晚期创建的。您将必须通过将任务分配为Closure返回类型来推迟对任务的引用。

apply plugin: 'maven-publish'
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
jar {
    into("META-INF/maven/$project.group/$project.name") {
        from { generatePomFileForMavenJavaPublication }
        rename ".*", "pom.xml"
    }
}

来自github

from想要文件或路径。您要喂的东西,generatePomFileForMavenJavaPublication是一项任务,绝对不是文件或路径,所以这无法正常工作。

您可以做的是使generatePomFileForMavenJavaPublication成为jar的先决条件,并拾取其在构建目录中创建的POM。

类似以下的事情应该做到这一点:

jar {
    dependsOn generatePomFileForMavenJavaPublication
    from("$builddir/pom.xml") //Or whatever path it goes to in the generate task.
    into("META-INF/maven/$project.group/$project.name")
}

我刚刚发现pom.xml不必在罐子内。

当我发布到Maven Local(而不是Maven Central)时,它可以工作:

group 'ch.test'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'maven-publish'
sourceCompatibility = 1.5
repositories {
    mavenLocal()
}
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile group: 'postgresql', name: 'postgresql', version: '9.1-901.jdbc4'
}

最新更新