Как исключить все артефакты из группы в maven?
Я использую maven 3 с плагином Enforcer, настроенным для слияния версий. Я использую Spring 3.1.2 и Spring Security 3.1.3.
Проблема заключается в том, что Spring 3.1.3 POM объявляет зависимости от Spring 3.0.7, потому что это минимальная потребность в версии для безопасности Spring. Это означает, что плагин принудительного действия жалуется, потому что график транзитивной зависимости имеет как Spring 3.1.2, так и Spring 3.0.7.
Исправление состоит в том, чтобы явно исключить Spring 3.0.7 в качестве зависимости безопасности Spring, чтобы плагин принудительного исполнения был счастлив.
Ниже приведен фрагмент кода, поэтому проблема заключается в том, что мне приходится повторять один и тот же фрагмент кода за каждый бит безопасности Spring, это утомительно и делает pom трудным для чтения, есть способ сказать что-то вроде строк.
для зависимости org.springframework.security, независимо от того, что искусственно игнорирует зависимость структуры безопасности в структуре Spring?
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-acl</artifactId>
<version>${spring.security.version}</version>
<exclusions>
<exclusion>
<artifactId>spring-tx</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-asm</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-aop</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-jdbc</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-expression</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
<exclusions>
<exclusion>
<artifactId>spring-aop</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-expression</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>aopalliance</artifactId>
<groupId>aopalliance</groupId>
</exclusion>
<exclusion>
<artifactId>spring-web</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-jdbc</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-tx</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
Ответы
Ответ 1
Это, вероятно, не поможет вам, но есть запрос функции, чтобы разрешить маскировку в исключениях, однако это не относится к текущей версии Maven (3.0.4). (Изменить: эта функция теперь присутствует в Maven 3.2.1)
https://issues.apache.org/jira/browse/MNG-3832
Интересным является комментарий в этой проблеме JIRA:
Не уверен, что происходит, но, похоже, это работает в Maven 3.0.3, используя это:
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
Однако это вызывает следующие предупреждения:
[ПРЕДУПРЕЖДЕНИЕ] 'dependencies.dependency.exclusions.exclusion.groupId' для my.groupid: my.artifactid: ejb-client со значением '*' не соответствует допустимому шаблону идентификатора. @строка 31, столбец 30
[ПРЕДУПРЕЖДЕНИЕ] 'dependencies.dependency.exclusions.exclusion.artifactId' для my.groupid: my.artifactid: ejb-client со значением '*' не соответствует действительному шаблону идентификатора. @строка 32, столбец 33
Поэтому я, вероятно, не должен этого делать, но он работает.
Таким образом, вы можете использовать подстановочный знак artifactId в Maven 3.0.3 или новее и работать с ним, но с предупреждениями и без гарантии совместимости с более поздними версиями.
Ответ 2
Это сработало для меня, исключая все артефакты для groupId org.springframework
:
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
Ответ 3
Я столкнулся с той же проблемой. Я думаю, что вы должны явно включать Spring 3.2.x в свой pom.xml для обеспечения версии Spring на уровне 0, когда Maven разрешает конфликтные банки.
Пожалуйста, обратитесь к:
http://www.baeldung.com/spring-security-with-maven