如何在Gradle中使用pom类型依赖关系
我需要从pom类型的Java库中生成可传递依赖项。下面是一个关于我是如何做到这一点的例子:如何在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.
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
}