Как запустить плагин maven на определенном этапе и с определенными конфигурациями через командную строку?

#java #maven #maven-3 #maven-plugin

#ява #мавен #мавен-3 #maven-плагин #java #maven #maven-3

Вопрос:

Я создал плагин maven, и я хочу запустить плагин с помощью командной строки, ничего не меняя (например, pom.xml ) в эталонном проекте. В настоящее время я использую mvn groupId:artifactId:version:goal test (я хочу запустить свой плагин вместе с тестом). Но вот в чем проблемы:

  1. Я не знаю, как настроить мой плагин с помощью командной строки. Например, если изменение pom разрешено, существует множество пользовательских конфигураций для настройки <configuration> , таких как:

     <plugin>
        <groupId>...</groupId>
        <artifactId>...</artifactId>
        <version>...</version>
        <configuration>
            <debug>true</debug>
            <packageNamePrefix>com/foo/bar</packageNamePrefix>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>...</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
      

    Как использовать командную строку для настройки этих атрибутов в <configuration> ?

  2. Я хочу запустить свой плагин на определенном этапе (в частности, в LifecyclePhase.PROCESS_TEST_CLASSES ). Например, мой класс mojo реализован следующим образом:

     @Mojo(name = "goal", defaultPhase = LifecyclePhase.PROCESS_TEST_CLASSES, requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true)
    @Execute(phase = LifecyclePhase.PROCESS_TEST_CLASSES)
    public class myMojo extends MyAbstractMojo {
        ...
    }
      

    Когда я использую mvn groupId:artifactId:version:goal test или mvn test groupId:artifactId:version:goal , я, к сожалению, обнаружил, что мой плагин был запущен в неправильной фазе. Как это исправить? Есть ли способ явно объявить фазу желания в этих командных строках?

Ответ №1:

По первому вопросу:

Вы можете прочитать свойства в своем плагине и задать свойства в командной строке с помощью -Dproperty=value .

По второму вопросу:

Если вы вызываете плагин в командной строке напрямую (как groupId:artifactId:version:goal ), он не принадлежит какой-либо фазе. Итак, если вы запустите

mvn groupId:artifactId:version:goal test

сначала запускается плагин, а затем все этапы от начала до test , и если вы запустите

mvn test groupId:artifactId:version:goal

затем сначала выполняются все этапы до test , а затем запускается ваш плагин.

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

Комментарии:

1. Есть ли способ выполнить мою цель плагина на этом этапе PROCESS_TEST_CLASSES ? Я думаю, что PROCESS_TEST_CLASSES это промежуточная фаза test .

2. Да, но только путем добавления вашего плагина в POM.

3. Если вы хотите запустить свой плагин между другими плагинами, которые запускаются при вашем вызове mvn test , то вам, вероятно, придется вызывать все плагины явно, т.Е. mvn firstpluging yourplugin secondplugin вместо использования test .