Использование плагина Maven Enforcer - PullRequest
17 голосов
/ 20 июля 2011

Я бы хотел использовать плагин Maven Enforcer для проверки наличия дублирующих классов на моем пути.Я пробовал пример из здесь .

Но когда я запускаю его так:

mvn enforcer:enforce

Я получаю это:

Не удалось выполнить цель org.apache.maven.plugins: maven-inspecer-plugin: 1.0.1: принудительное применение (default-cli) в датапопуляторе проекта: параметры «правила» для цели org.apache.maven.plugins: maven -forcer-plugin: 1.0.1: принудительное применение отсутствует или недействительно

Есть ли способ использовать это правильно?

РЕДАКТИРОВАТЬ # 1

Если изменить мою конфигурацию следующим образом:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>1.0.1</version>
            <executions>
                <execution>
                    <id>enforce-versions</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <AlwaysPass />
                        </rules>
                        <fail>true</fail>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Выдает ту же ошибку.

Ответы [ 4 ]

24 голосов
/ 20 июля 2011

Причина, по которой ваша первая версия не сработала, заключается в том, что существует разница между конфигурацией плагина внутри тега исполнения и конфигурацией плагина вне тега исполнения.Выполнение используется только тогда, когда ваш плагин запускается специальной фазой полной сборки Maven.

Руководство по настройке Maven объясняет это лучше:

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

16 голосов
/ 15 сентября 2011

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.0.1</version>
    <executions>
        <execution>
            <id>enforce-versions</id>
            <goals>
                <goal>enforce</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <rules>
            <AlwaysPass />
        </rules>
        <fail>true</fail>
    </configuration>
</plugin>

Теперь, когда вы делаете mvn enforcer:enforce, он выбирает правила из вашего pom.xml.

7 голосов
/ 16 сентября 2015

См. Эти ответы

Вы можете использовать специальный идентификатор выполнения командной строки по умолчанию, default-cli, чтобы вызвать его (см. Документы Maven ), см. Мой пример ниже. Это работает по крайней мере с 3.1.1, и в цитируемой статье говорится, что это должно работать с 2.2.0 +

mvn enforcer:enforce

Однако, если вы используете выше Maven 3.1.1 (я могу подтвердить, что он работает в 3.3.3 с empforcer v 1.4.1), вы можете указать желаемый идентификатор выполнения используя новый синтаксис @ (см. Maven JIRA и ответы выше);

например. для приведенного ниже примера используйте

mvn enforcer:enforce@dependency-convergence

Вот фрагмент моей помпы;

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>1.4.1</version>
            <executions>
                <execution>
                    <id>dependency-convergence</id>
                    <phase>install</phase>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <DependencyConvergence />
                        </rules>
                        <fail>true</fail>
                    </configuration>
                </execution>
                <execution>
                    <id>default-cli</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <DependencyConvergence/>
                        </rules>
                        <fail>true</fail>
                    </configuration>
                </execution>
            </executions>
        </plugin>
      ...
3 голосов
/ 20 июля 2011

Я не знаю, почему он не будет работать с конфигурацией, находящейся в процессе выполнения, но у меня это сработало:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <rules>
                    <banDuplicateClasses>
                        <findAllDuplicates>true</findAllDuplicates>
                    </banDuplicateClasses>
                </rules>
                <fail>false</fail>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>extra-enforcer-rules</artifactId>
                    <version>1.0-alpha-1</version>
                </dependency>
            </dependencies>
        </plugin>
...