Изменение порядка выполнения плагина maven

Привет, я очень новичок в maven. Я хотел бы изменить порядок выполнения плагина maven. В моем pom.xml у меня есть подключаемый модуль maven-assembly и maven ant. Я использовал подключаемый модуль maven для создания zip файла и maven ant плагина для копирования zip файла с целевого на некоторый другой каталог. Когда я запускаю pom.xml maven ant, подключаемый модуль запускается и ищет zip файл, наконец, я получил сообщение об ошибке, когда zip файл не найден. Пожалуйста, предложите мне способ запускать сборку сборки maven сначала после того, как этот maven ant должен запускаться, чтобы скопировать zip файл в соответствующий каталог.

Ответ 1

Поскольку вы говорите, что вы очень новичок в Maven... Maven builds - это выполнение упорядоченного ряда фаз. Эти фазы определяются lifecycle, которые соответствуют вашему проекту на его упаковке.

Следовательно, вы управляете, когда цель плагина выполняется привязывает его к определенной фазе.

Надеюсь, что это поможет.

EDIT: Кроме того, поскольку Maven 3.0.3 для двух плагинов, привязанных к той же фазе, порядок выполнения совпадает с порядком, в котором вы определяете их. Например:

<plugin>
  <artifactId>maven-plugin-1</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <phase>process-resources</phase>
      ...
    </execution>
  </executions>
</plugin> 
<plugin>
  <artifactId>maven-plugin-2</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <phase>process-resources</phase>
      ...
    </execution>
  </executions>
</plugin> 
<plugin>
  <artifactId>maven-plugin-3</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <phase>generate-resources</phase>
      ...
    </execution>
  </executions>
</plugin>

В приведенном выше экземпляре порядок выполнения:

  • maven-plugin-3 (генерировать ресурсы)
  • maven-plugin-1 (process-resources)
  • maven-plugin-2 (process-resources)

Ответ 2

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

В случае pom hierachy вам нужно повторно объявить плагины из родительского pom (только его groupId и его artifactId) в дочерний pom, чтобы указать порядок выполнения:

Родительский pom.xml

<plugins>
    <plugin>
        <groupId>groupid.maven.1</groupId>
        <artifactId>maven-plugin-1</artifactId>
        <version>1.0</version>
        <executions>
            <execution>
                <phase>package</phase>
            </execution>
        </executions>
    </plugin>
</plugins>

Ребенок pom.xml

<plugins>
    <plugin>
        <groupId>groupid.maven.2</groupId>
        <artifactId>maven-plugin-2</artifactId>
        <version>1.0</version>
        <executions>
            <execution>
                <phase>package</phase>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>groupid.maven.1</groupId>
        <artifactId>maven-plugin-1</artifactId>
    </plugin>
</plugins>

Затем выполнение:

  • maven.plugin.2
  • maven.plugin.1

Ответ 3

В Maven 3.0.3 и более поздних версиях существует два правила

Например, здесь mavin-plugin-1 выполняется до maven-plugin-2 поскольку фаза технологических ресурсов определяется как имеющая место до фаза компиляции.

<plugin>
  <artifactId>maven-plugin-2</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <phase>compile</phase>
      ...
    </execution>
  </executions>
</plugin>
<plugin>
  <artifactId>maven-plugin-1</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <phase>process-resources</phase>
      ...
    </execution>
  </executions>
</plugin> 
  1. Если несколько исполнений имеют одну и ту же фазу, то первая из них будет исполняемый будет встроенным (например, maven-compiler-plugin), идентификатор которого default-something, то остальные исполнения будут выполняться в чтобы они отображались в вашем файле pom.

Например, если у вас есть это где-то в вашем pom

        <plugin>
            <artifactId>maven-plugin-1</artifactId>
            <version>1.2.3</version>
            <executions>
                <execution>
                    <id>my-compile</id>
                    <phase>compile</phase>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-plugin-2</artifactId>
            <version>4.5.6</version>
            <executions>
                <execution>
                    <id>my-compile-2</id>
                    <phase>compile</phase>
                </execution>
            </executions>
        </plugin>

и это где угодно в вашем эффективном pom

  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
      <execution>
        <id>**default-compile**</id>
        <phase>compile</phase>
        <goals>
          <goal>compile</goal>
        </goals>
      </execution>
      ...
    </executions>
  </plugin>

тогда maven-compiler-plugin выполнит maven-compiler-plugin, за которым следуют maven-plugin-1 и maven-plugin-2.

Если вы хотите, чтобы maven-compiler-plugin: компилировать цель для выполнения после maven-plugin-1, вы могли бы сделать это

<plugin>
    <artifactId>maven-plugin-1</artifactId>
    <version>1.2.3</version>
    <executions>
        <execution>
            <id>my-compile</id>
            <phase>compile</phase>
        </execution>
    </executions>
</plugin>
<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
        <execution>
            <id>something-other-than-**default-compile**</id>
            <phase>compile</phase>
        </execution>
        <execution>
            <id>**default-compile**</id>
            <phase>none</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>