Maven是自動化構建工具。包含:項目關係的處理,項目打包,項目發佈等功能;java
Maven是基於POM(項目對象模型)模型進行管理jar包。web
Maven獲取依賴的流程。spring
1.在項目中配置POM、添加其餘項目(jar包)的座標。apache
Group Id(組織名) Artifact Id(項目名) version(版本)mybatis
2.項目先去本地倉庫中找指定座標項目(jar包),若是有就把這個jar包以來進行,若是沒有,就去中央倉庫去進行下載到本地倉庫中。app
1.手動構建不用模板webapp
2.配置Maven的鏡像和jdk版本maven
因爲中央倉庫默認是國外的。把中央倉庫地址配置成國內提高下載速度。多配置到阿里巴巴的鏡像ide
在settings、xml中添加 工具
mirror配置鏡像
profile配置jdk
<?xml version="1.0" encoding="UTF-8"?> |
3.配置pom.xml
全部依賴的jar都放在<dependencies>標籤中
每一個jar就是一個<dependency>標籤
全部jar的座標能夠在https://mvnrepository.com
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
</dependencies>
Maven基於POM模型。把每一個項目都當作一個對象進行看待,每一個對象包含三個屬性:Group Id,Artifact Id,Version。項目和項目之間具備三種關係:依賴、繼承、聚合。
所謂的依賴就是在Maven中導入其餘項目的jar包。能夠導入中央倉庫中包含的jar,也能夠導入當前本身的其餘項目jar。
新建maven項目。
雙擊install把當前項目打包成jar,並安裝到本地倉庫中。同時也能夠在當前項目的target文件夾中看見
在另外一個項目的pom.xml中添加剛纔項目的依賴就能夠。
假設項目B依賴了項目A,若是項目C依賴了項目B,項目C也可使用項目A中內容。這也是爲何導入Spring-context時出現了不少其餘jar的緣由。
不少狀況會出現依賴的版本是咱們不能使用的版本,經過在pom.xml中經過<exclusions>取消依賴傳遞性。在經過<dependency>從新進行依賴其餘版本。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.8.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
若是項目A繼承了項目B,在項目B的pom.xml中配置的內容會被繼承(父項目能夠控制是否被繼承)。
繼承關係只能在子項目中體現出來。在子項目的pom.xml中會有<parent>標籤。
能夠經過<dependecyManagement>控制裏面的內容是子項目可能使用的jar包。裏面的內容在子項目中不會自動被依賴,若是子項目須要依賴此jar,須要手動進行<dependecy>可是座標中能夠沒有<version>.
在父項目中一旦使用<dependecyManagement>多結合<properties>標籤進行版本控制
<!-- 統一的版本管理 -->
<properties>
<spring-context-version>5.1.7.RELEASE</spring-context-version>
</properties>
<!--子項目可能使用 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-context-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 全部子項目必定會被導入-->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
</dependencies>
在子項目中不須要寫version
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
</dependencies>
聚合是繼承的特例。聚合的前提是繼承。
聚合是父項目直接把子項目包含在當前項目中。而繼承只是Maven控制項目和項目直接具備繼承關係,父項目文件夾中沒有子項目。
聚合關係時不只僅子項目中有<parent>父項目中還具備<modules>
<modules>
<module>child</module>
<module>child2</module>
</modules>
在Maven中項目一共分爲3中類型。pom,jar,war默認是jar類型。能夠經過<packaging>進行配置。
表示項目打包後爲jar類型。表示當前項目爲普通java項目。
表示項目打包後爲war類型。表示當前項目爲web項目。若是是web項目必須修改這個值爲war,不然沒法打包webapp文件夾。
當項目是父項目時項目類型爲pom。在idea中一旦給一個項目建立module後會自動把父項目的<packaging>修改成pom
<scope>是<dependency>子標籤,控制這個jar何時生效。
可取值:
compile:默認值,編譯運行等都須要
provided:只有編譯時使用
runtime:只有運行時使用
test:只有在測試的使用使用
在Maven項目,Maven會對java文件夾中.java進行編譯,其餘文件不編譯。resources裏面內容會直接放入到 classes中,Maven認爲全部的資源文件(非.java文件)應該都放入到resouces下。
一旦配置了資源拷貝插件後,Maven將不自動把src/main/resources下的內容進行編譯拷貝。
資源拷貝插件是配置在<build>下的
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>