如何在Gradle中使用Pom类型依赖

伊兹巴萨尔·托莱根

我需要从我的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"])
  }
}

这种配置的问题是,在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正确发布所需的依赖关系呢?

在带有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依赖性,必须将正确的值放入生成的文件的type字段中。但是,如果您为依赖项添加pom扩展名,则Gradle将无法解析此工件中声明的可传递依赖项。设置传递标记的值可解决此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章