如何在 Gradle 中使用 pom 类型依赖
How to use pom type dependency in Gradle
我需要从我的 Java 库中生成传递依赖,它是 pom 类型的。这是我如何做的一个例子:
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"])
}
}
此配置的问题在于,在我的库的已发布 pom.xml
中,依赖项的类型为 jar
(默认情况下)并声明如下:
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>apache-sshd</artifactId>
<version>1.6.0</version>
<!-- Should declare pom type -->
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>org.slf4j<groupId>
</exclusion>
</exclusions>
</dependency>
因此,当我尝试使用我从另一个项目发布的库时,它失败了,因为没有 apache-sshd
这样的工件,因为它的类型应该是 pom
。那么如何使用 Gradle 正确发布所需的依赖项?
运行 Gradle 5.3.1 使用 Kotlin DSL。
尝试使用以下构造在 Gradle
中声明依赖关系
api("org.apache.sshd:apache-sshd:1.6.0@pom") {
exclude(group = "org.slf4j")
isTransitive = true
}
看起来 Gradle 默认情况下将所有依赖项作为 jar 类型使用。 Maven 插件使用此提取的类型在 pom 文件中生成依赖项部分。对于 pom 依赖,有必要将正确的值放入生成文件的类型字段中。但是,如果您为依赖项添加 pom 扩展名,Gradle 将不会解析在此工件中声明的传递依赖项。设置传递标志的值可解决此问题。
我用过如下:
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
}
我需要从我的 Java 库中生成传递依赖,它是 pom 类型的。这是我如何做的一个例子:
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"])
}
}
此配置的问题在于,在我的库的已发布 pom.xml
中,依赖项的类型为 jar
(默认情况下)并声明如下:
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>apache-sshd</artifactId>
<version>1.6.0</version>
<!-- Should declare pom type -->
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>org.slf4j<groupId>
</exclusion>
</exclusions>
</dependency>
因此,当我尝试使用我从另一个项目发布的库时,它失败了,因为没有 apache-sshd
这样的工件,因为它的类型应该是 pom
。那么如何使用 Gradle 正确发布所需的依赖项?
运行 Gradle 5.3.1 使用 Kotlin DSL。
尝试使用以下构造在 Gradle
中声明依赖关系api("org.apache.sshd:apache-sshd:1.6.0@pom") {
exclude(group = "org.slf4j")
isTransitive = true
}
看起来 Gradle 默认情况下将所有依赖项作为 jar 类型使用。 Maven 插件使用此提取的类型在 pom 文件中生成依赖项部分。对于 pom 依赖,有必要将正确的值放入生成文件的类型字段中。但是,如果您为依赖项添加 pom 扩展名,Gradle 将不会解析在此工件中声明的传递依赖项。设置传递标志的值可解决此问题。
我用过如下:
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
}