首页 > 解决方案 > 使用 gradle 在 Jar 中包含 pom.xml

问题描述

我试图在我用 gradle 创建pom.xml的中包含一个生成的。jar

到目前为止,在我的父项目中,我有

subprojects {
    apply plugin: 'maven-publish'

    publishing {
        publications {
            maven(MavenPublication) {
                from(components.java)
            }
        }
    }
}

在子项目中我有:

tasks.build.dependsOn install

sourceSets {
    main {
        resources {
            srcDirs = [ "src/main/resources", "build/poms" ]
        }
    }
}

这将生成./build/poms/pom-default.xml,但不会将其添加到 JAR。

在较早的阶段build创建依赖项而不是创建循环依赖项(我不知道这是否是问题所在)。

另外,我希望以 name (not )pom.xml出现在里面,所以这可能不是正确的方法。META-INFpom.xmlpom-default.xml

不知怎的,我在想它不可能像看起来那么复杂?

标签: javamavengradle

解决方案


您应该能够通过将以下内容添加到您的subprojects闭包中来将 POM 包含在您的 JAR 中:

jar {
    into("META-INF/maven/${project.group}/${project.name}") {
        from generatePomFileForMavenPublication
        rename { it.replace('pom-default.xml', 'pom.xml') }
    }
}

如果你已经有一个jar闭包,你可以在那里添加它。这会自动创建对generatePomFileForMavenPublication任务的任务依赖,以便在创建 JAR 时 POM 文件就在那里。
为此,您的问题中的sourceSets部分不是必需的。

(旁注:完全没有必要这样做,因为 Maven 发布过程无论如何都会将 POM 作为单独的工件发布。)


推荐阅读