Подтвердить что ты не робот

Maven: удалить одну транзитивную зависимость

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

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

Как я могу оставить один файл jar из моих транзитивных зависимостей?

4b9b3361

Ответ 1

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

        <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>

Ответ 2

Правильный способ - использовать механизм исключений, однако иногда вы можете вместо этого использовать следующий хак, чтобы избежать добавления большого количества исключений, когда множество артефактов имеют одну и ту же транзитивную зависимость, которую вы хотите игнорировать. Вместо указания исключения вы определяете дополнительную зависимость с объемом "предоставленного". Это говорит 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

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

На веб-сайте 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>