Почему есть опция для исключения зависимости в pom.xml / maven? - PullRequest
0 голосов
/ 13 ноября 2018

Я читал Введение в POM и не понимаю следующее.В pom.xml вы можете настроить зависимости, скажем, мы настраиваем зависимость maven-embedder.Затем вы можете исключить зависимости вашей зависимости, скажем, мы хотим исключить maven-core из зависимости maven-embedder.В каких случаях вы хотели бы это сделать?Не приведет ли это к тому, что ваша зависимость перестанет работать, если у нее нет всех зависимостей?Я явно скучаю здесь по части головоломки:)

  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-embedder</artifactId>
      <version>2.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    ...
  </dependencies>

Пример: https://maven.apache.org/pom.html#Exclusions

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Возможно, пример поможет. У нас был сценарий использования этого недавно.

У нашей зависимости (которая была довольно большой, но от которой нам потребовалась всего пара изолированных методов) была зависимость от Rhino , но мы не приблизились бы к частям, касающимся носорога кода.

В нашем модуле мы включали YUI Compressor . По какой-то причине обе библиотеки имеют одно и то же полностью определенное имя класса, но с немного отличающимися сигнатурами методов.

Результатом было то, что, включая транзитивную зависимость Rhino сломал функциональность, которая ранее работала. Компрессор YUI вызвал исключительную ситуацию времени выполнения, поскольку подпись метода отличалась от ожидаемой.

Решением было явное исключение Rhino.


Как правило, вам не нужно исключать зависимости. Обычно это происходит из-за плохо спроектированных модулей.

Например, если модуль становится слишком большим, большинству пользователей может понадобиться только часть их классов или методов, поэтому не все их зависимости будут строго требоваться. В этом случае разработчикам библиотеки, вероятно, следует разбить модуль на набор более мелких модулей.

Наличие одинакового полностью квалифицированного имени класса в двух разных библиотеках кажется плохим решением для проектирования.

0 голосов
/ 13 ноября 2018

Хитрость в том, что вы можете использовать другую версию переходной зависимости, а не версию по умолчанию. Другими словами, вы можете заменить или даже отключить часть поведения по умолчанию.

...