Привет, я очень новичок в maven. Я хотел бы изменить порядок выполнения плагина maven. В моем pom.xml у меня есть подключаемый модуль maven-assembly и maven ant. Я использовал подключаемый модуль maven для создания zip файла и maven ant плагина для копирования zip файла с целевого на некоторый другой каталог. Когда я запускаю pom.xml maven ant, подключаемый модуль запускается и ищет zip файл, наконец, я получил сообщение об ошибке, когда zip файл не найден. Пожалуйста, предложите мне способ запускать сборку сборки maven сначала после того, как этот maven ant должен запускаться, чтобы скопировать zip файл в соответствующий каталог.
Изменение порядка выполнения плагина maven
Ответ 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 и более поздних версиях существует два правила
- Исполнения плагинов упорядочены в соответствии с их фазами. Видеть https://maven.apache.org/ref/current/maven-core/lifecycles.html для порядок фаз.
Например, здесь 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>
- Если несколько исполнений имеют одну и ту же фазу, то первая из них будет исполняемый будет встроенным (например, 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>