как исключить все артефакты из группы в maven?

Я использую maven 3 с плагином Enforcer, настроенным для обеспечения конвергенции версий. Я использую Spring 3.1.2 и Spring Security 3.1.3.

Проблема в том, что Spring 3.1.3 POM объявляет зависимости от Spring 3.0.7, потому что это минимальная версия, необходимая для безопасности Spring. Это означает, что подключаемый модуль Enforcer жалуется, потому что в транзитивном графе зависимостей есть как Spring 3.1.2, так и Spring 3.0.7.

Исправление состоит в том, чтобы явно исключить Spring 3.0.7 как зависимость безопасности Spring, чтобы подключаемый модуль Enforcer был счастлив.

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

для зависимости org.springframework.security независимо от того, какой artificatId игнорирует зависимость системы безопасности от среды 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>

person ams    schedule 22.10.2012    source источник


Ответы (3)


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

Так что, вероятно, мне не следует этого делать, но это работает.

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

person prunge    schedule 23.10.2012
comment
Я думаю, что ams пытается исключить только groupId org.springframework. * исключит все. - person AlikElzin-kilaka; 18.05.2016

Это сработало для меня, исключая все артефакты для groupId org.springframework:

<exclusions>
    <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>*</artifactId>
    </exclusion>
</exclusions>
person AlikElzin-kilaka    schedule 18.05.2016
comment
NB: у меня работает на maven версии 3.3.1, вызывает предупреждение на maven версии 3.0.4 - person Hille; 03.01.2017

Я столкнулся с той же проблемой. Я думаю, вам следует явно включить Spring 3.2.x в ваш pom.xml, чтобы обеспечить использование весенней версии на уровне 0, когда Maven разрешает конфликтные банки. См.: http://www.baeldung.com/spring-security-with-maven

person Bill Lee    schedule 18.05.2013