Исключая зависимости Maven - PullRequest
20 голосов
/ 02 февраля 2012

У меня есть запрос об исключении зависимостей maven. Рассмотрим следующее

   <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>${spring-security.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>3.1.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.1.0.RELEASE</version>
    </dependency>
    <dependency>

Я пытаюсь добиться перехода с Spring 3.0.6 на 3.1.0. Spring security 3.1.0 зависел от spring-security-web версии 3.0.6, которая, в свою очередь, зависела от spring-web 3.0.6. Мне нужно все это довести до 3.1.0. Поэтому я исключаю spring-security-web из Spring security, у меня есть отдельная зависимость для spring-security-web 3.1.0, которая, в свою очередь, исключает версию spring-web 3.0.6, и я предоставляю отдельную версию spring-web 3.1.0. Эта работа, но я чувствую, что был бы намного более легкий подход. Я пытался поместить исключение для Spring в раздел Spring Security, но это не сработало. Пожалуйста, помогите.

Ответы [ 2 ]

21 голосов
/ 03 февраля 2012

Вы можете использовать механизм управления зависимостями .

Если вы создадите записи в разделе вашего pom для spring-security-web и spring-web с заданной версией 3.1.0, управляемая версия артефакта переопределит те, которые указаны в дереве переходных зависимостей.

Я не уверен, действительно ли это спасет вас от какого-либо кода, но это более чистое решение, IMO.

12 голосов
/ 03 февраля 2012

Глобальные исключения похоже, что они работают над , но до тех пор ...

Из справочника Sonatype Maven (внизу страницы):

Управление зависимостями в POM верхнего уровня отличается от просто определение зависимости от широко распространенного родительского POM. Для начала все зависимости наследуются. Если бы mysql-connector-java были перечислены как зависимость родительского проекта верхнего уровня, каждый проект в иерархия будет иметь ссылку на эту зависимость. Вместо добавление ненужных зависимостей, использование dependencyManagement позволяет вам консолидировать и централизовать управление зависимостями версии без добавления зависимостей, которые наследуются всеми дети. Другими словами, элемент dependencyManagement является эквивалентно переменной окружения, которая позволяет вам объявить зависимость в любом месте ниже проекта без указания версии число.

Как пример:

  <dependencies>
    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>3.0.5.RELEASE</version>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    </dependencies>
  </dependencyManagement>

Это не делает код менее многословным в целом, но делает его менее подробным там, где он имеет значение. Если вы все еще хотите, чтобы он был менее подробным, вы можете следовать этим советам также из справочника Sonatype.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...