使用gradle在jar中生成pom.xml

时间:2016-06-17 07:46:31

标签: java gradle jar pom.xml

我想用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'.

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

3 个答案:

答案 0 :(得分:1)

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")
}

答案 1 :(得分:0)

任务generatePomFileForMavenJavaPublication是在配置阶段后期创建的。您必须通过在from语句中将任务指定为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

答案 2 :(得分:-1)

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

当我发布到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'
}