Как использовать зависимость типа pom в Gradle - PullRequest
0 голосов
/ 08 апреля 2019

Мне нужно создать транзитивную зависимость из моей библиотеки 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.

1 Ответ

1 голос
/ 08 апреля 2019

Попробуйте использовать следующую конструкцию для объявления зависимости в Gradle

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

Похоже, что Gradle использует все зависимости как тип jar по умолчанию. А плагин Maven генерирует раздел зависимостей в pom-файле, используя этот извлеченный тип. Для зависимости pom необходимо ввести правильное значение в поле типа генерируемого файла. Но если вы добавите расширение pom для своей зависимости, Gradle не разрешит транзитивные зависимости, объявленные в этом артефакте. Установка значения переходного флага решает эту проблему.

...