前面我們已經接觸了`npm`這個包管理器,我們使用其在`Node.js`安裝需要的包。對于`maven`我們大概可以這樣理解:
`360軟件管家` = `windows`下的軟件管理工具。
`npm` = `Node.js`下的軟件管理工具。
`maven` = `java`下的軟件管理工具。
除此以外,如果你用過其它的管理工具比如`php`下的`compose`、`python`的`pip`等,理解為什么要在這里安裝`maven`就很輕松了。
## MACOS
### 使用命令行安裝
在`macos`的環境下,我們可以使用包管理工具`brew`進行`maven`的安裝,僅需打開命令行:
```
brew install maven
// 指定maven版本
brew install maven@3.5
```
使用`mvn -v`來查看安裝成功,您也可以參照以下教程手動安裝`maven`。
```
htx@htxdeMac-mini ~ mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/Cellar/maven@3.5/3.5.4/libexec
Java version: 1.8.0_222, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"
```
### 下載
進入`maven`[官網](https://maven.apache.org/download.cgi)獲取下載壓縮包,注意最新版本的`maven`需要`jdk1.7`或更高的版本才能運行。

### 安裝
將下載的安裝包解壓并移動自定義的文件目錄下,在這里選擇了我電腦上的`/Users/htx/bin/apache-maven-3.6.2`這個目錄。
配置本用戶的環境變量。
```
vim ~/.bash_profile
```
修改`M2_HOME`為安裝包路徑,粘貼到命令行上,依次敲入`Esc`,`:wq`,回車保存。
```
export M2_HOME=/Users/htx/bin/apache-maven-3.6.2
export PATH=$PATH:$M2_HOME/bin
```
使資源生效:
```
source ~/.bash_profile
```
### 驗證
輸入`mvn -v`:
```
htx@htxdeMac-mini ~ mvn -v
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)
Maven home: /Users/htx/bin/apache-maven-3.6.2
Java version: 1.8.0_222, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"
```
## ubuntu
`maven`的安裝與`jdk`的安裝過程大同小異,讓我們一步步安裝一下。
### 下載
進入`maven`的官方[下載鏈接](https://maven.apache.org/download.cgi),注意目前最新版的`maven(3.6.2)`要求`jdk1.7`以上的版本,如果你按照之前的教程安裝過jdk8,那么可以繼續安裝。

點擊`apache-maven-3.6.2-bin.tar.gz`這一項進行下載。
### 解壓
進入下載目錄解壓,可以使用右鍵,選擇提取到,之后選擇jdk安裝的位置;也可以使用命令進行解壓,在命令行中進入jdk的存放目錄,輸入解壓命令:
`sudo tar -zxvf 文件名-C 解壓到的目錄(不寫則為當前目錄)`

## 設置環境變量
是不是覺得上一次的`vim`很難用?很不習慣?
實際上ubuntu下也是有比較“正常”的文本編輯器的,這一次我決定用它,在命令行中輸入:`sudo gedit /etc/profile`([是不是感覺上次不是這個文件?](https://segmentfault.com/a/1190000006446751#articleHeader5))
熟悉的編輯頁面出現了

文末添加如下配置并保存
```
export M2_HOME=文件所在目錄
export PATH=${M2_HOME}/bin:$PATH
```

接下來需要做什么還記得嗎?對,讓新設置的環境變量生效
運行:`source /etc/profile`
### 驗證
看看效果:`mvn -v`

### 同樣的可以使用apt一鍵安裝
`sudo apt-get install maven`
## windows
### 下載
進入`maven`的官方[下載鏈接](https://maven.apache.org/download.cgi),注意目前最新版的`maven(3.6.2)`要求`jdk1.7`以上的版本,如果你按照之前的教程安裝過jdk8,那么可以繼續安裝。

點擊`apache-maven-3.6.2-bin.zip`這一項進行下載。
### 安裝
下載后將壓縮包進行解壓,將文件夾剪切到`C:\Program Files`(您可以放入任何路徑下 ,但需要記住這個安裝路徑以便接下來的配置)。

接下來我們配置`maven`的環境變量,打開配置環境變量的窗口,點擊系統變量的新建,添加:
```
變量名: M2_HOME
變量值: C:\Program Files\apache-maven-3.6.2-bin\apache-maven-3.6.2
```
您也可以選擇瀏覽目錄,然后選擇你的安裝路徑。

之后,我們編輯`Path`,在最末尾追加`%M2_HOME%\bin`這一項:

### 驗證
代開終端,輸入`mvn -v`進行驗證:

- 序言
- 第一章:Hello World
- 第一節:Angular準備工作
- 1 Node.js
- 2 npm
- 3 WebStorm
- 第二節:Hello Angular
- 第三節:Spring Boot準備工作
- 1 JDK
- 2 MAVEN
- 3 IDEA
- 第四節:Hello Spring Boot
- 1 Spring Initializr
- 2 Hello Spring Boot!
- 3 maven國內源配置
- 4 package與import
- 第五節:Hello Spring Boot + Angular
- 1 依賴注入【前】
- 2 HttpClient獲取數據【前】
- 3 數據綁定【前】
- 4 回調函數【選學】
- 第二章 教師管理
- 第一節 數據庫初始化
- 第二節 CRUD之R查數據
- 1 原型初始化【前】
- 2 連接數據庫【后】
- 3 使用JDBC讀取數據【后】
- 4 前后臺對接
- 5 ng-if【前】
- 6 日期管道【前】
- 第三節 CRUD之C增數據
- 1 新建組件并映射路由【前】
- 2 模板驅動表單【前】
- 3 httpClient post請求【前】
- 4 保存數據【后】
- 5 組件間調用【前】
- 第四節 CRUD之U改數據
- 1 路由參數【前】
- 2 請求映射【后】
- 3 前后臺對接【前】
- 4 更新數據【前】
- 5 更新某個教師【后】
- 6 路由器鏈接【前】
- 7 觀察者模式【前】
- 第五節 CRUD之D刪數據
- 1 綁定到用戶輸入事件【前】
- 2 刪除某個教師【后】
- 第六節 代碼重構
- 1 文件夾化【前】
- 2 優化交互體驗【前】
- 3 相對與絕對地址【前】
- 第三章 班級管理
- 第一節 JPA初始化數據表
- 第二節 班級列表
- 1 新建模塊【前】
- 2 初識單元測試【前】
- 3 初始化原型【前】
- 4 面向對象【前】
- 5 測試HTTP請求【前】
- 6 測試INPUT【前】
- 7 測試BUTTON【前】
- 8 @RequestParam【后】
- 9 Repository【后】
- 10 前后臺對接【前】
- 第三節 新增班級
- 1 初始化【前】
- 2 響應式表單【前】
- 3 測試POST請求【前】
- 4 JPA插入數據【后】
- 5 單元測試【后】
- 6 惰性加載【前】
- 7 對接【前】
- 第四節 編輯班級
- 1 FormGroup【前】
- 2 x、[x]、{{x}}與(x)【前】
- 3 模擬路由服務【前】
- 4 測試間諜spy【前】
- 5 使用JPA更新數據【后】
- 6 分層開發【后】
- 7 前后臺對接
- 8 深入imports【前】
- 9 深入exports【前】
- 第五節 選擇教師組件
- 1 初始化【前】
- 2 動態數據綁定【前】
- 3 初識泛型
- 4 @Output()【前】
- 5 @Input()【前】
- 6 再識單元測試【前】
- 7 其它問題
- 第六節 刪除班級
- 1 TDD【前】
- 2 TDD【后】
- 3 前后臺對接
- 第四章 學生管理
- 第一節 引入Bootstrap【前】
- 第二節 NAV導航組件【前】
- 1 初始化
- 2 Bootstrap格式化
- 3 RouterLinkActive
- 第三節 footer組件【前】
- 第四節 歡迎界面【前】
- 第五節 新增學生
- 1 初始化【前】
- 2 選擇班級組件【前】
- 3 復用選擇組件【前】
- 4 完善功能【前】
- 5 MVC【前】
- 6 非NULL校驗【后】
- 7 唯一性校驗【后】
- 8 @PrePersist【后】
- 9 CM層開發【后】
- 10 集成測試
- 第六節 學生列表
- 1 分頁【后】
- 2 HashMap與LinkedHashMap
- 3 初識綜合查詢【后】
- 4 綜合查詢進階【后】
- 5 小試綜合查詢【后】
- 6 初始化【前】
- 7 M層【前】
- 8 單元測試與分頁【前】
- 9 單選與多選【前】
- 10 集成測試
- 第七節 編輯學生
- 1 初始化【前】
- 2 嵌套組件測試【前】
- 3 功能開發【前】
- 4 JsonPath【后】
- 5 spyOn【后】
- 6 集成測試
- 7 @Input 異步傳值【前】
- 8 值傳遞與引入傳遞
- 9 @PreUpdate【后】
- 10 表單驗證【前】
- 第八節 刪除學生
- 1 CSS選擇器【前】
- 2 confirm【前】
- 3 功能開發與測試【后】
- 4 集成測試
- 5 定制提示框【前】
- 6 引入圖標庫【前】
- 第九節 集成測試
- 第五章 登錄與注銷
- 第一節:普通登錄
- 1 原型【前】
- 2 功能設計【前】
- 3 功能設計【后】
- 4 應用登錄組件【前】
- 5 注銷【前】
- 6 保留登錄狀態【前】
- 第二節:你是誰
- 1 過濾器【后】
- 2 令牌機制【后】
- 3 裝飾器模式【后】
- 4 攔截器【前】
- 5 RxJS操作符【前】
- 6 用戶登錄與注銷【后】
- 7 個人中心【前】
- 8 攔截器【后】
- 9 集成測試
- 10 單例模式
- 第六章 課程管理
- 第一節 新增課程
- 1 初始化【前】
- 2 嵌套組件測試【前】
- 3 async管道【前】
- 4 優雅的測試【前】
- 5 功能開發【前】
- 6 實體監聽器【后】
- 7 @ManyToMany【后】
- 8 集成測試【前】
- 9 異步驗證器【前】
- 10 詳解CORS【前】
- 第二節 課程列表
- 第三節 果斷
- 1 初始化【前】
- 2 分頁組件【前】
- 2 分頁組件【前】
- 3 綜合查詢【前】
- 4 綜合查詢【后】
- 4 綜合查詢【后】
- 第節 班級列表
- 第節 教師列表
- 第節 編輯課程
- TODO返回機制【前】
- 4 彈出框組件【前】
- 5 多路由出口【前】
- 第節 刪除課程
- 第七章 權限管理
- 第一節 AOP
- 總結
- 開發規范
- 備用