如何让Gradle用依赖元数据填充jar?

时间:2016-07-15 15:30:31

标签: gradle metadata

因此,如果我在Maven中构建一个jar,例如jackson-core-2.5.1.jar,我会在工件中找到以下内容:

META-INF/maven/
META-INF/maven/com.fasterxml.jackson.core/
META-INF/maven/com.fasterxml.jackson.core/jackson-core/
META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties
META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml
然而,Gradle似乎没有创建这些数据。问题是我们有几个构建组件,包括父项目,它们不在同一个SCM位置。对于我们庞大而复杂的构建,如果没有元数据,Gradle将如何知道一个SCM位置中的本地构建工件依赖于另一个SCM位置中的本地构建工件? Gradle管理这种情况的方法是什么?

1 个答案:

答案 0 :(得分:2)

存储库包含pom.xml的单独副本。它通常位于磁盘上物理结构中的JAR文件旁边。这适用于Nexus或Artifatory等二进制存储库,也适用于本地Maven存储库($HOME/.m2/repo下)。

如果出于某种原因想要复制Maven的行为,可以告诉Gradle创建这些文件。我们在subprojects闭包中使用此自定义来配置我们的多项目Gradle构建。

jar {
    // until we have better solution
    // https://discuss.gradle.org/t/jar-task-does-not-see-dependency-when-using-maven-publish/11091
    if (project.tasks.findByName('generatePomFileForMavenJavaPublication')) {
        dependsOn 'generatePomFileForMavenJavaPublication'
    } else {
        project.tasks.whenTaskAdded { addedTask ->
            if (addedTask.name == 'generatePomFileForMavenJavaPublication') {
                project.tasks.jar.dependsOn 'generatePomFileForMavenJavaPublication'
            }
        }
    }
    into("META-INF/maven/$project.group/$project.archivesBaseName") {
        /*
        from generatePomFileForMavenJavaPublication
        */
        from new File(project.buildDir, 'publications/mavenJava')
        rename ".*", "pom.xml"

    }
}

如果有时候懒惰地创建generatePomFileForMavenJavaPublication任务没有问题会更简单。您需要检查如何创建属性文件。我猜你可以从那里运行Gradle进程转储属性。