Maven: удалить одну транзитивную зависимость - PullRequest
26 голосов
/ 03 мая 2009

Мой проект содержит файл JAR, потому что он указан как транзитивная зависимость.

Однако я убедился, что он не только мне не нужен, но и вызывает проблемы, потому что класс внутри jar-файлов скрывает нужный мне класс в другом jar-файле.

Как мне исключить один файл JAR из моих транзитивных зависимостей?

Ответы [ 3 ]

32 голосов
/ 03 мая 2009

Вы можете исключить зависимость следующим образом:

        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
                <version>2.5.6</version>
                <exclusions>
                        <exclusion>
                                <groupId>commons-logging</groupId>
                                <artifactId>commons-logging</artifactId>
                        </exclusion>
                </exclusions>
        </dependency>
15 голосов
/ 03 мая 2009

Правильный способ - использовать механизм исключений, однако иногда вы можете предпочесть использовать следующий взлом вместо того, чтобы избежать добавления большого количества исключений, когда множество артефактов имеют такую ​​же транзитивную зависимость, которую вы хотите игнорировать. Вместо того, чтобы указывать исключение, вы определяете дополнительную зависимость с областью «предоставлено». Это говорит Maven, что вы вручную позаботитесь о предоставлении этого артефакта во время выполнения, поэтому он не будет упакован. Например:

    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6</version>
    </dependency>
    <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <scope>provided</scope>
    </dependency>

Побочный эффект: вы должны указать версию артефакта, который нужно игнорировать, и его POM будет получен во время сборки; это не случай с регулярными исключениями. Это может быть проблемой для вас, если вы используете свой собственный репозиторий Maven за брандмауэром.

3 голосов
/ 03 мая 2009

Вы можете сделать это, явно исключив проблемный артефакт. Возьмите зависимость, которая включает проблему, и отметьте ее для исключения:

С сайта maven :

<dependency>
  <groupId>group-a</groupId>
  <artifactId>artifact-a</artifactId>
  <version>1.0</version>
  <exclusions>
    <exclusion>
      <groupId>group-c</groupId>
      <artifactId>excluded-artifact</artifactId>
    </exclusion>
  </exclusions>
</dependency>
...