Как определить mojo по умолчанию для плагина maven - PullRequest
10 голосов
/ 20 апреля 2011

Я написал плагин, который генерирует один файл в target / generate-sources /. Этот плагин имеет только один моджо. Это mojo объявлено со следующим:

/**
 * @goal convertsql
 * @phase generate-sources
 * @requiresProject
 */
public class ConverterMojo extends AbstractMojo { 

В проекте я хочу использовать плагин, но он не будет работать, если я не укажу тег выполнения:

<executions>
    <execution>
        <id>convert</id>
        <goals><goal>convertsql</goal></goals>
        <phase>generate-sources</phase>
    </execution>
</executions>

Я бы хотел настроить плагин так:

<plugin>
    <groupId>com.my.plugins</groupId>
    <artifactId>sqlconverter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <configuration>
        <sourceFile>src/main/resources/sql/schema_oracle.sql</sourceFile>
    </configuration>
</plugin>

Можно ли указать mojo по умолчанию для моего плагина? Цель и фаза по умолчанию определены в mojo ... Я имею в виду, что при использовании плагина jar мне не нужно указывать цель, которую я хочу выполнить, на каком этапе ... это автоматически.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

Плагин Maven автоматически запускает свою цель по умолчанию, когда его фаза по умолчанию выполняется, невозможно.Это сбивает с толку, потому что в есть много стандартных «привязок» плагина для конкретных упаковок .Они определены в ядре Maven: https://maven.apache.org/ref/3.6.1/maven-core/default-bindings.html

Например, для упаковки WAR это:

<phases>
  <process-resources>
    org.apache.maven.plugins:maven-resources-plugin:2.6:resources
  </process-resources>
  <compile>
    org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
  </compile>
  <process-test-resources>
    org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
  </process-test-resources>
  <test-compile>
    org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
  </test-compile>
  <test>
    org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
  </test>
  <package>
    org.apache.maven.plugins:maven-war-plugin:2.2:war
  </package>
  <install>
    org.apache.maven.plugins:maven-install-plugin:2.4:install
  </install>
  <deploy>
    org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
  </deploy>
</phases>

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

<executions>
    <execution>
        <id>convert</id>
        <!--
           Not needed for default phase of plugin goal:
           <phase>generate-sources</phase>
        -->
        <goals>
            <goal>convertsql</goal>
        </goals>
    </execution>
</executions>

Также см. https://maven.apache.org/developers/mojo-api-specification.html (ищите @phase).Соответствующая цитата (мой акцент):

Определяет фазу по умолчанию, чтобы связать выполнение mojo с тем, если пользователь явно не устанавливает фазу в POM.Примечание: Эта аннотация не будет автоматически запускать mojo при добавлении объявления плагина в POM. Она просто позволяет пользователю исключить элемент из окружающего элемента.

0 голосов
/ 20 апреля 2011

Вам необходимо добавить файл META-INF/plexus/components.xml в ваш плагин и установить <extensions>true</extensions> в вашем блоке плагинов.

См. 11.6.3.Переопределение жизненного цикла по умолчанию из Maven Book для справки

...