Как подключить плагин maven к фазе по умолчанию? - PullRequest
21 голосов
/ 07 марта 2011

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

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

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

Это возможно?

Ответы [ 4 ]

7 голосов
/ 07 марта 2011

Поместите аннотацию @phase в свои аннотации класса Mojo.

Док говорит:

@phase <phaseName>

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

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

6 голосов
/ 19 декабря 2013

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

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

Затем добавьте ваш плагин в соответствующие LifeCycle (s) на той стадии, на которой вы хотите их построить.

Например, consumer-aar Mojo добавлен в фазу compile жизненного цикла 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>
0 голосов
/ 19 октября 2017

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

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

Реальный проект: 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

0 голосов
/ 07 марта 2011

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

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

<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 не так просто в начале. Но потом это полезно.

...