Maven 教程

1. 介紹

構建(build)一個項目包括:下載依賴,編譯源代碼,執行單元測試,以及打包編譯後的源代碼等一系列子任務。手工的執行這些任務是一項很是繁瑣,且容易出錯的事情。Maven封裝了這些子任務,並提供給用戶執行這些子任務的命令。簡而言之,Maven是Java項目的一個管理和構建(build)工具。html

2. 項目對象模型(Project Object Model)

項目對象模型(如下簡稱POM)是Maven的基本組成單元,它是位於項目主目錄下的一個xml文件(pom.xml),Maven使用pom.xml文件中的信息來構建(build)項目。spring

一個簡單的pom.xml的結構看起來以下:apache

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>
  <build>
     <plugins>
         <plugin>
            //...
         </plugin>
     </plugins>
  </build>
</project>

本小結將介紹pom.xml中經常使用的一些元素。編程

2.1 項目標識符(Project Identifiers)

  • groupId - 建立項目的公司或者組織的名稱
  • artifactId - 項目的名稱
  • version - 項目的版本號
  • packaging - 項目的打包方式(jar/war/pom)

GAV (groupId:artifactId:version)是Maven項目的惟一表示符。packaging決定Maven生成包的類型,默認值是jar。app

2.2 依賴(dependencies)

pom.xml文件經過元素<dependency>來聲明外部依賴,例如:maven

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
</dependencies>

聲明項目依賴3.8.1版本的junit。默認狀況下,Maven將在構建項目的時候從Maven的中央倉庫(Central Repository)下載依賴到本地倉庫(${USER_HOME/.m2/repository/})。不過用戶也能夠經過元素<repository>來聲明備選倉庫(alternate repository)。編程語言

2.3 屬性(Properties)

能夠像在Java等編程語言中定義變量同樣,在pom.xml文件中定義屬性,這樣就能夠達到一處定義,多處使用的目的,使用和維護起來也更加容易。ide

pom.xml中經過元素<properties>定義屬性,經過佔位符${property_name}使用屬性。以下:工具

<properties>
    <spring.version>4.3.5.RELEASE</spring.version>
</properties>
 
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>

若是在未來須要升級spring-core和spring-context的版本,那時將只須要修改屬性spring.version的值。單元測試

2.4 構建(build)

元素<build>中能夠指定默認的Maven Goal的信息,編譯後的文件的名稱,名稱等信息。以下:

<build>
    <defaultGoal>install<defaultGoal>
    <directory>${basedir}/target</directory>
    <finalName>${artifactId}-${version}</finalName>
    ...
</build>

2.5 Profiles

在實際的平常開發中,在不一樣的環境(test/prod) 一般會有不一樣的構建(build)邏輯或者配置。元素<profile>能夠用來實現這個目的。以下:

<profiles>
    <profile>
        <id>prod</id>
        <build>
            <plugins>
                <plugin>
                //...
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>test</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                //...
                </plugin>
            </plugins>
        </build>
     </profile>
 </profiles>

若是想觸發某個profile,可使用命令:mvn clean install -P<profile id>

3. Maven構建生命週期(build lifecycle):

Maven的構建生命週期定義瞭如何構建和發佈Java項目,Maven內建了三種構建生命週期:clean,default,site。構建生命週期由一系列的階段(phase)構成:

  • validate
  • compile
  • test
  • package
  • verify
  • install
  • deploy

具體各個階段的定義能夠參考Maven文檔。命令 mvn <phase>能夠用來執行<phase>以及<phase>以前的階段。例如:
mvn install 將執行validate ~ install全部的階段。

4. 經常使用命令

  • mvn archetype:generate -DgroupId=<groupId> -DartifactId=<artifactId> 建立一個項目
  • mvn compile 編譯項目
  • mvn test 執行測試用例
  • mvn install 安裝編譯後的二進制包到本地Maven倉庫。

......

5. 其餘內容

多模塊(multi-module)和 plugin goal,等等。

6. 參考

  1. https://www.baeldung.com/maven
  2. https://maven.apache.org/guid...
  3. https://maven.apache.org/guid...
  4. https://maven.apache.org/guid...
相關文章
相關標籤/搜索