我是maven的新手.我想改变maven插件执行的顺序.
在我的pom.xml中,我有maven-assembly-plugin和maven-ant-plugin.我使用maven-assembly-plugin创建zip文件和maven-ant-plugin,用于将zip文件从目标复制到其他目录.当我运行pom.xml时,maven-ant-plugin被触发并查找zip文件,最后我收到错误,说找不到zip文件.在maven-ant-plugin需要运行之后,请先建议我如何运行maven-assembly-plugin,以便将zip文件复制到相应的目录.
Sri*_*ran 44
既然你说你是Maven的新手...... Maven构建是一系列有序阶段的执行.这些阶段由基于其包装的项目生命周期决定.
因此,你控制在一个插件的目标是通过执行其绑定到特定阶段.
希望有所帮助.
编辑:此外,由于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>
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,执行顺序是:
Bap*_*ste 14
处于同一阶段的插件按声明的顺序执行.
在pom层次结构的情况下,您必须将父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>
Run Code Online (Sandbox Code Playgroud)
孩子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>
Run Code Online (Sandbox Code Playgroud)
然后执行是:
Dra*_*oiu 10
这可能是一个老问题,提供的答案是正确的,只是添加了关于继承情况的额外一点,因为我发现自己处于这种情况并且无法弄清楚。
当不提供继承时,插件顺序执行似乎有 2 条规则:
在继承的情况下:“父 POM 绑定在子绑定之后执行。”。因此,如果您的插件没有按照您期望的顺序执行(按照本答案中提到的前两点),您可能应该查看它们是否在父 POM 中定义。-同一阶段插件的执行顺序不正确。
我找不到任何地方明确记录这一点,但是有一个开放的票据来记录计算插件执行顺序的算法。
在Maven 3.0.3及更高版本中,有两个规则
例如,这里mavin-plugin-1在maven-plugin-2之前执行,因为process-resources阶段被定义为在编译阶段之前发生.
<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>
Run Code Online (Sandbox Code Playgroud)
例如,如果你在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>
Run Code Online (Sandbox Code Playgroud)
在你有效的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>
Run Code Online (Sandbox Code Playgroud)
然后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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26959 次 |
| 最近记录: |