Как выполнить ряд целей перед запуском моего плагина Maven? - PullRequest
12 голосов
/ 15 сентября 2009

Я пишу плагин Maven (Mojo), который должен выполнить стандартный набор других исполнений плагина перед его запуском.

Существует ли механизм для объявления всех целей в моем плагине, поэтому мне не нужно полагаться на то, что пользователь определяет их все в своем POM?

1 Ответ

14 голосов
/ 15 сентября 2009

Вы можете сделать это, определив пользовательский жизненный цикл и вызвав этот жизненный цикл перед выполнением вашего Mojo с помощью аннотации execute.

В вашем Mojo объявите в Javadoc жизненный цикл, который нужно выполнить:

/**
 * Invoke the custom lifecycle before executing this goal.
 * 
 * @goal my-goal
 * @execute lifecycle="my-custom-lifecycle" phase="process-resources"
 */
public class MyMojo extends AbstractMojo {
...

Затем определите пользовательский жизненный цикл в src / main / resources / META-INF / maven / lifecycle.xml.

Жизненный цикл немного похож на plexus components.xml, но позволяет вам указать конфигурацию для этих целей.

Обратите внимание, что синтаксис немного отличается от конфигурации плагинов в pom. Вы определяете цель, используя: как разделитель, а не определяя отдельные элементы groupId, artifactId и version, в противном случае это в значительной степени та же запись, что и у элемента исполнения конфигурации плагина в pom. Вы даже можете использовать некоторые свойства в lifecycle.xml (хотя, возможно, поддерживаются не все свойства, мне нужно это проверить).

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

<lifecycles>
  <lifecycle>
    <id>download-dependencies</id>
    <phases>
      <phase>
        <id>process-resources</id>
        <executions>
          <execution>
            <goals>
              <goal>
                org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies
              </goal>
            </goals>
            <configuration>
              <includeScope>compile</includeScope>
              <includeTypes>war</includeTypes>
              <overWrite>true</overWrite>
              <outputDirectory>
                ${project.build.outputDirectory}/wars
              </outputDirectory>
            </configuration>
          </execution>
          <execution>
            <goals>
              <goal>
                org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies
              </goal>
            </goals>
            <configuration>
              <includeScope>compile</includeScope>
              <includeTypes>jar</includeTypes>
              <overWrite>true</overWrite>
              <outputDirectory>
                ${project.build.outputDirectory}/jars
              </outputDirectory>
            </configuration>
          </execution>
        </executions>
      </phase>
    </phases>
  </lifecycle>
</lifecycles>

При таком подходе плагин зависимостей будет вызываться один раз для каждой конфигурации в фазе process-resources разветвленного жизненного цикла (все происходит в рамках выполнения, определенного в Mojo).

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

Подробнее о жизненных циклах вы можете узнать в разделе Создание пользовательского жизненного цикла книги Maven. Это не дает исчерпывающий список того, что разрешено, хотя. Единственное другое упоминание, которое я знаю, если это от Maven 2 alpha , так что, возможно, это не так актуально

...