所有的知识来源于Maven官方网站:https://maven.apache.org/;Maven开发者搭建的官方学习网站永远是最好的学习平台。
在maven中,插件的主要功能是帮助maven完成生命周期的构建。在插件中,可以定义多个goal,生命周期中的每个阶段可以绑定多个插件的多个goal,goal可以被理解为是maven最小的任务单元。在maven的默认生命周期中,提供了一套官方的插件和生命周期阶段绑定的策略。绑定策略根据maven中pom文件指定的打包方式有所不同。maven的默认打包方式是jar包方式。我们以此为例:
phase plugin:goal
process-resources resources:resources
compile compiler:compile
process-test-resource sresources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy
在上述列表中,例如process-resources resources:resources,process-resources 是生命周期阶段的名称,第一个resources是resources插件的简称或者是前缀,maven有一套对应表将简称与全称对应。resources对应的插件完全名称是groupId:org.apache.maven.plugins,artifactId:maven-resources-plugin. 在maven中,当我们使用mvn install命令时,maven会按照打包方式调用默认的插件策略去执行任务。但是当我们需要设置个人性化参数时,我们可以在pom文件中的<build>节点下添加<plugin>节点去覆盖默认的配置方式,比如,我们需要指定maven编译器的版本是jdk1.8,我们可以在pom文件中添加如下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artfactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configration>
</plugin>
</plugins>
</build>
提供官网提供的官放的插件与生命周期的绑定列表:(maven3.6.2)
<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-jar-plugin:2.4:jar
</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>
当我们需要使用自己定义的插件时,我们可以将自己插件的goal绑定到生命周期上:例如如下配置
<plugin>
<groupId>com.mycompany.example</groupId>
<artifactId>display-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>process-test-resources</phase>
<goals>
<goal>time</goal>
</goals>
</execution>
</executions>
</plugin>
上面配置的意义是将display-maven-plugin这个插件的time(goal)绑定到process-test-resources生命周期,maven执行时,会先执行默认绑定的resources:testResources,再执行我们定义个goal。
网友评论