1. 程式人生 > >maven打war包的過程中,都用了哪些外掛呢?

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

 lifecycle handles your project deployment, the clean lifecycle handles project cleaning, while the site lifecycle handles the creation of your project's site documentation.

 

 

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中預設繫結的那幾個外掛。