如何在Gradle中使用pom类型依赖关系

如何在Gradle中使用pom类型依赖关系,gradle,gradle-kotlin-dsl,Gradle,Gradle Kotlin Dsl,我需要从pom类型的Java库中生成可传递依赖项。下面是一个关于我是如何做到这一点的例子: plugins { `java-library` `maven-publish` } repositories { // some maven repo } dependencies { // This is POM type dependency: api("org.apache.sshd:apache-sshd:1.6.0") { exclude(group = "org.

我需要从pom类型的Java库中生成可传递依赖项。下面是一个关于我是如何做到这一点的例子:

plugins {
  `java-library`
  `maven-publish`
}
repositories {
  // some maven repo
}
dependencies {
  // This is POM type dependency:
  api("org.apache.sshd:apache-sshd:1.6.0") {
    exclude(group = "org.slf4j")
  }
}
publications {
  create<MavenPublication>("maven") {
    from(components["java"])
  }
}
因此,当我尝试从另一个项目中使用我发布的库时,它失败了,因为没有像
apachesshd
这样的工件,因为它的类型应该是
pom
。那么,如何使用Gradle正确发布所需的依赖关系呢


使用Kotlin DSL在Gradle 5.3.1上运行。

尝试使用以下构造在Gradle中声明依赖关系

api("org.apache.sshd:apache-sshd:1.6.0@pom") {
   exclude(group = "org.slf4j")
   isTransitive = true
}

看起来Gradle默认使用所有依赖项作为jar类型。Maven插件使用这个提取的类型在pom文件中生成依赖项部分。对于pom依赖项,有必要将正确的值放入生成文件的类型字段中。但是,如果您为依赖项添加pom扩展,Gradle将无法解析此工件中声明的可传递依赖项。设置transitive flag的值可以解决此问题。

我以以下方式使用它:

compile(group: "dependency_group", name: "dependency_name", version: "dependency_name", extension: "pom")
如果要排除可传递依赖项 添加
transitive
标志并将其设置为false

compile(group: "dependency_group", name: "dependency_name", version: "dependency_name", extension: "pom"){
     transitive = false
}


此处的标志必须是可传递的,而不是可传递的。
compile(group: "dependency_group", name: "dependency_name", version: "dependency_name", extension: "pom"){
     transitive = false
}