所有的知識來源于Maven官方網(wǎng)站:https://maven.apache.org/;Maven開發(fā)者搭建的官方學習網(wǎng)站永遠是最好的學習平臺。
在maven中,插件的主要功能是幫助maven完成生命周期的構(gòu)建。在插件中,可以定義多個goal,生命周期中的每個階段可以綁定多個插件的多個goal,goal可以被理解為是maven最小的任務(wù)單元。在maven的默認生命周期中,提供了一套官方的插件和生命周期階段綁定的策略。綁定策略根據(jù)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會按照打包方式調(diào)用默認的插件策略去執(zhí)行任務(wù)。但是當我們需要設(shè)置個人性化參數(shù)時,我們可以在pom文件中的<build>節(jié)點下添加<plugin>節(jié)點去覆蓋默認的配置方式,比如,我們需要指定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>
提供官網(wǎng)提供的官放的插件與生命周期的綁定列表:(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執(zhí)行時,會先執(zhí)行默認綁定的resources:testResources,再執(zhí)行我們定義個goal。