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

Как подключить плагин maven к фазе по умолчанию?

У меня есть плагин maven, который должен запускаться на этапе компиляции, поэтому в проекте, который потребляет мой плагин, я должен сделать что-то вроде этого:

<executions>
 <execution>
  <phase>compile</phase>
  <goals>
   <goal>my-goal</goal>
  </goals>
 </execution>
</executions>

Мне нужно, чтобы по умолчанию прикрепить my-goal к фазе компиляции, если пользователь уже включил мой плагин (в идеале вышеуказанная часть не нужна, просто объявление плагина).

Возможно ли это?

4b9b3361

Ответ 1

Добавьте аннотацию @phase в аннотации классов Mojo.

Док говорит:

@phase <phaseName>

Эта аннотация определяет фазу по умолчанию для этой цели. Если вы добавите выполнение для этой цели в pom.xml и не укажете фазу, Maven привяжет цель к фазе, указанной в этой аннотации по умолчанию.

Если это не сработает, я думаю, что JIRA гарантируется.

Ответ 2

Создайте экземпляр src\main\resources\META-INF\plexus\components.xml в вашем плагине.

В нем создается сопоставление LifeCycle для типов артефактов, которые вы хотите поддержать Mojo. Убедитесь, что в нем перечислены все фазы и плагины, которые вы хотите поддерживать. Вероятно, лучше всего скопировать из файла maven-core.jar.

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

Например, consume-aar Mojo добавлен в фазу скомпилировать жизненного цикла aar.

<!--  Android archive (aar) support -->
<component>
  <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
  <role-hint>aar</role-hint>
  <implementation>
    org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
  </implementation>
  <configuration>
    <phases>
      <generate-sources>
        com.jayway.maven.plugins.android.generation2:android-maven-plugin:generate-sources
      </generate-sources>
      <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
      <compile>
        com.jayway.maven.plugins.android.generation2:android-maven-plugin:consume-aar,
        org.apache.maven.plugins:maven-compiler-plugin:compile
      </compile>

Ответ 3

Это возможно, но это недокументированная функция maven.

Используйте этот components.xml:

<component-set>
  <components>
    <component>
        <role>org.apache.maven.lifecycle.Lifecycle</role>
        <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
        <role-hint>myplugin</role-hint>
        <configuration>
            <id>accurest</id>
            <phases>
                <phase>my-plugin-not-used-phase</phase>
            </phases>
            <default-phases>
                <compile>
                    my.package:my-plugin:${project.version}:my-goal
                </compile>
            </default-phases>
        </configuration>
    </component>
</components>

но ваш плагин необходимо добавить с помощью <extensions>true</extensions> для изменения существующего жизненного цикла.

Подробнее: Как привязать плагины mojos (цели) к нескольким этапам жизненного цикла по умолчанию?

Реальный проект: https://github.com/spring-cloud/spring-cloud-contract/blob/master/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/resources/META-INF/plexus/components.xml

Ответ 4

Вы связываете плагин с maven lifecyle цель. Конфигурация плагина должна быть объявлена ​​в фазе.

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

<project>
...
...
 <build>
   <plugin>
      **Configuration of plugin**
   </plugin>
 </build>
 </project>

Пожалуйста, внимательно прочитайте о жизненных циклах maven (это важно для понимания maven): http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

И затем прочитайте о том, как настроить плагин: http://maven.apache.org/guides/mini/guide-configuring-plugins.html

P.S. Входить в логику maven нелегко вначале. Но это вознаграждение впоследствии.