如何为具有所有依赖项的Gradle项目生成pom文件?

ogq8wdun  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(269)

我有一个Gradle项目,它将依赖项存储在toml文件中。我想生成POM文件的依赖关系。这是我的build.gradle文件:

plugins {
    id 'maven-publish'
}

dependencies {
    api ( libs.bundles.api) {
        exclude(group: 'org.apache.hadoop', module: 'zookeeper')
        exclude(group: 'org.apache.hadoop', module: 'slf4j-log4j12')
        exclude(group: 'org.apache.hadoop', module: 'log4j')
        exclude(group: 'org.apache.hadoop', module: 'jsp-api')
        exclude(group: 'org.apache.hadoop', module: 'servlet-api')
    }
    compileOnly(libs.slf4j.api)
    testImplementation(libs.bundles.test.implementation)
    annotationProcessor(libs.lombok)
    testAnnotationProcessor(libs.lombok)
}

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

字符串
当我跑的时候
gradle publishToMavenLocal
我只从libs.bundles.api中获取包含依赖项的pom文件。范围compileOnly、testImplementation、annotationProcessor、testAnnotationProcessor没有依赖关系。请帮助解决这个问题。

pcww981p

pcww981p1#

已发布的POM文件将仅包含运行时依赖项。使用和运行项目所需的依赖项。这是正确的。
仅编译
这些仅在编译项目时需要,而在运行项目时不需要。
测试实作
这些仅在运行项目的测试时需要,而在将其作为依赖项运行时不需要。
注解处理器
这些仅在项目生成期间使用,运行项目时不需要。
测试注解处理器
只有在建置项目的测试期间才需要这些项目,而消费者使用项目时并不需要。
为了做你想做的事,你需要在发布中自定义POM:

  • 构建.分级.kts*

这是在KotlinDSL中,但可以很容易地转换为Groovy DSL。

publishing {
    publications {
        create<MavenPublication>("fakePom") {
            this.pom.withXml {
                val allDeps = project.configurations.runtimeClasspath.get().resolvedConfiguration.firstLevelModuleDependencies +
                    project.configurations.compileClasspath.get().resolvedConfiguration.firstLevelModuleDependencies +
                    project.configurations.testRuntimeClasspath.get().resolvedConfiguration.firstLevelModuleDependencies +
                    project.configurations.testCompileClasspath.get().resolvedConfiguration.firstLevelModuleDependencies

                val root = asNode()

                root.children()
                    .filterIsInstance<Node>()
                    .map { it as Node }
                    .filter { "dependencies" == it.name() || "dependencyManagement" == it.name() }
                    .forEach {
                        root.remove(it)
                    }

                val ds = root.appendNode("dependencies")

                allDeps.forEach { d ->
                    val dn = ds.appendNode("dependency")
                    dn.appendNode("groupId", d.moduleGroup)
                    dn.appendNode("artifactId", d.name)
                    dn.appendNode("version", d.moduleVersion)
                }
            }
        }
    }
}

个字符

相关问题