maven打war包的過程中,都用了哪些外掛呢?
一、maven生命週期
http://ifeve.com/introduction-to-the-lifecycle/
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
1.內建的三個生命週期
我這邊的簡單理解是:
首先一共有三個內建的生命週期,一個為clean,一個為default,一個為site。
There are three built-in build lifecycles: default, clean and site. The default
2.生命週期的組成
一個生命週期包含了許多階段,比如compile階段,install階段等等。階段是有順序的,典型的如下:
3.goal是什麼
在講階段之前,先說下goal。
goal可以簡單理解為一個功能,功能是由外掛實現的。
牛逼的外掛可以有很多個goal,當然,我們不鼓勵一個外掛做了所有的事,畢竟unix哲學嘛。
比如compile外掛,org.apache.maven.plugins:maven-compiler-plugin。
它既可以編譯main下面的程式碼,也可以編譯test下面的程式碼,這裡就被分成了兩個goal:
compile和testCompile。
當然,也有個直觀介紹(idea中的maven檢視),看下圖:
4.階段的組成
每個階段由0到多個目標(goal)組成。
但是,goal可以選擇不繫結到階段,也可以繫結到多個階段。
所以執行整個生命週期的過程,就是按照順序,執行各個phase,具體到每個phase的時候,按順序執行繫結到該phase的goal。
以打jar包為例,預設maven已經幫我們在每個phase中綁定了goal,如下:
5.如果我們想在某個階段新增goal怎麼辦呢?
可以像下面這樣,在<phase>元素中指定:
以上配置<phase>中配置了process-test-resources階段,該階段我們附加了一個goal,那就是time。
再看下面的配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1</version> <configuration> <attach>true</attach> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
以上配置在<phase>中指定了compile,即在compile階段附加一個goal,該goal為當前外掛的jar。
二、default生命週期中打包時預設繫結的外掛
https://maven.apache.org/ref/3.6.0/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging
專門對比了下jar包和war包,可以發現只有打包階段用的外掛不一樣:
這個可以驗證,在idea中,一個預設的maven web工程,在maven檢視中,plugins中顯示的外掛如下:
可以看到,剩下的幾個外掛,正好是war包pom中預設繫結的那幾個外掛。