[TOC]
* [Pom.xml](Pom.md)
# 使用maven 管理項目
## 1.1. 基本要素
| 要素??????? | 說明???????????????????????????????????????????????????????? |
| ----------- | ------------------------------------------------------------ |
| 技術邊界??? | Maven是一個項目管理工具,基于xml,用于管理Java項目的構建、依賴和文檔。|
| 特性??????? | 聲明式構建、依賴管理、統一的項目結構、生命周期、插件等|?
| 使用場景??? | Java項目的構建與依賴管理|?
| 應用方法?? | Maven的生命周期階段(clean、compile、test、package、install、deploy)、<br>依賴范圍(compile、test、runtime等)、<br>插件(maven- compiler-plugin等)|
| 項目結構關系 | pom.xml文件定義項目元信息, src/main/java源代碼,src/test/java測試代碼,src/main/resources資源等|
|實施關鍵流程|1. 安裝Maven <br> 2. 創建Maven項目: mvn archetype:generate <br>3. 編寫pom.xml:包括配置依賴、插件等 <br>4. 編譯項目:mvn compile<br>5. 運行測試:mvn test <br>6. 打包:mvn package <br>7. 安裝到本地倉庫:mvn install <br>8. 部署到遠程倉庫:mvn deploy|
## 1.2. 項目包
### 1.2.1. 可以按層拆分(中小型)項目和按模塊拆分(大型)項目。
①大型項目:只需要將基礎模塊打包成jar包放在遠程倉庫,其它開發者添加配置就可以進行開發。
> 大型項目模塊拆分
- account模塊:處理賬戶業務,定義pom.xml
- order模塊:處理訂單業務,定義pom.xml
- user模塊:處理用戶業務,定義pom.xml
- 項目根目錄:定義pom.xml,通過modules標簽聲明所有模塊
②中小型項目:中小型項目按照傳統項目分為Web、Service業務層、Dao數據層,依照員工自身的業務能力分配工作。
> 中小型項目層級拆分
- 項目根目錄:定義全局pom.xml,包含項目版本、依賴、插件配置
- web層:包含web項目,定義pom.xml繼承項目pom,添加web依賴 如spring-web、servlet-api等
- service層:包含業務邏輯,定義pom.xml繼承項目pom,添加spring-context依賴
- dao層:包含數據訪問,定義pom.xml繼承項目pom,添加數據庫驅動依賴等
- entity層:包含實體對象,不需定義pom.xml
- util層:包含工具類,不需定義pom.xml
### 1.2.2. 一鍵構建項目:使用命令可以對項目進行一鍵構建,操作系統中無需安裝eclipse和tomcat。
如:mvn tomcat:run。更多常用命令:
①clean:清理;
②compile:編譯,只編譯main目錄,不編譯test中的代碼;
③test-compile:編譯test目錄中的代碼;
④test:運行test里邊的代碼;
⑤package:打包
- java項目->打成jar包;
- web項目->打成war包:
⑥install:發布項目到本地倉庫,用在打jar包上,打成jar包可以被其他項目使用;
### 1.2.3. Maven命令的生命周期:
①Clean生命周期:clean;
②Default生命周期:compile、test-compile、test、package、install
③Site生命周期:site命令,生成項目描述文檔靜態頁;
④不同的生命周期可以一起執行例如先clean再compile;
### 1.2.4. Maven命令的執行順序:
①在相同生命周期中的命令才會受執行順序的影響:
②Default生命周期中的命令執行順序: compile <-test-compile <-test <-package <-install;
### 1.2.5. 是否打包依賴屬性<Scope>
>依賴作用域也可稱作依賴范圍:maven中的依賴,會根據程序所處的階段和場景發生變化,所以maven用scope屬性來做限制;
|scope作用域 | 編譯階段Compile | 測試階段Test | 運行階段Run | 提供階段Package | 示例 |
| :-- | :-- |:-- |:-- | :-- |:-- |
| compile(默認) | 支持 | 支持 | 支持 | 不支持 |spring-context|
| test | 不支持 | 支持 | 不支持 | 不支持 | junit |
|runtime | 不支持 | 不支持 | 支持 | 支持 | mysql-connector-java|
|provided | 不支持 | 不支持 | 支持 | 支持 | servlet-api |
|system | 支持 | 支持 | 支持 | 不支持 | com.xxx.jar |
|import | 不支持 |不支持 | 不支持 | 支持 | javax.servlet-api|
> 支持情況列表:
- compile:編譯階段、測試階段和運行階段有效,被依賴項目需要包含此依賴。
- test:僅測試階段有效,被依賴項目不需要包含此依賴。
- runtime:僅運行階段和提供階段有效,被依賴項目需要包含此依賴。
- provided:僅提供階段有效,被依賴項目不需要包含此依賴,運行環境已提供。
- system:編譯階段、測試階段和運行階段有效,被依賴項目需要包含此依賴,Maven不會在中央倉庫中找到它。
- import:僅提供階段有效,被依賴項目需要包含此依賴,用來導入dependencyManagement中聲明的依賴版本號。
### 1.2.6. Maven模塊化開發。
```[sequence]
Title: 徐
Service子項目-->>Base父項目: 繼承至
Mapper子項目-->>Base父項目: 繼承至
Web子項目-->>Base父項目: 繼承至
Web子項目->Service子項目: 依賴
Service子項目->Mapper子項目: 依賴
Service子項目->Besn孫項目: 依賴
```
①maven 子項目可以繼承父項目的依賴。
②上圖將Maven-ssm-bean打包成jar,引入到 Maven-ssm-mapper、service、web/pom.xml做為依賴。分別就可以正常開發了。
### 1.2.7. 使用Nexus搭建私服。
> Nexus是Maven私服,用于搭建企業內部的Maven倉庫,主要有以下作用:
1. 代理中央倉庫,加速Jar包下載。
2. 存儲企業內部發布的Jar包,實現企業內部的Jar包共享。
3. 作為企業內部的Release倉庫,管理企業內部發布的Release版本。
4. 實現企業內部的Snapshot版本管理。
5. 提供強大的REST API,易于與CI服務器集成,實現自動化發布。
> 下面以Nexus3為例,說明如何搭建Maven私服:
1. 下載Nexus3安裝包,并解壓。進入bin目錄下。
2. 啟動Nexus: ./nexus start
3. 訪問Nexus:默認地址http://localhost:8081,默認賬號密碼:admin/admin123。
4. 創建代理倉庫:選擇選擇中央倉庫centralMirror,同步中央倉庫的所有jar。
5. 創建releases倉庫:接收發布的Release版本jar。
6. 創建snapshots倉庫:接收發布的Snapshot版本jar。
7. 創建倉庫組,將上述三個倉庫聚合起來,方便Maven下載。
8. 修改企業內部Maven settings.xml:
```
xml
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
```
9. 進入項目根目錄,運行mvn deploy將項目部署到私服。
10. 其他項目只需引入私服地址即可下載使用。
熟練搭建和使用Maven私服,可以極大提高企業內部jar包與dependencies的共享效率,統一管理各環境下的版本。
- 系統設計
- 需求分析
- 概要設計
- 詳細設計
- 邏輯模型設計
- 物理模型設計
- 產品設計
- 數據驅動產品設計
- 首頁
- 邏輯理解
- 微服務架構的關系數據庫優化
- Java基礎架構
- 編程范式
- 面向對象編程【模擬現實】
- 泛型編程【參數化】
- 函數式編程
- 響應式編程【異步流】
- 并發編程【多線程】
- 面向切面編程【代碼復用解耦】
- 聲明式編程【注解和配置】
- 函數響應式編程
- 語法基礎
- 包、接口、類、對象和切面案例代碼
- Springboot按以下步驟面向切面設計程序
- 關鍵詞
- 內部類、匿名類
- 數組、字符串、I/O
- 常用API
- 并發包
- XML
- Maven 包管理
- Pom.xml
- 技術框架
- SpringBoot
- 項目文件目錄
- Vue
- Vue項目文件目錄
- 遠程組件
- 敏捷開發前端應用
- Pinia Store
- Vite
- Composition API
- uniapp
- 本地方法JNI
- 腳本機制
- 編譯器API
- 注釋
- 源碼級注釋
- Javadoc
- 安全
- Swing和圖形化編程
- 國際化
- 精實或精益
- 精實軟件數據庫設計
- 精實的原理與方法
- 項目
- 零售軟件
- 擴展
- 1001_docker 示例
- 1002_Docker 常用命令
- 1003_微服務
- 1004_微服務數據模型范式
- 1005_數據模型
- 1006_springCloud
- AI 流程圖生成
- Wordpress_6
- Woocommerce_7
- WooCommerce常用的API和幫助函數
- WooCommerce的鉤子和過濾器
- REST API
- 數據庫API
- 模板系統
- 數據模型
- 1.Woo主題開發流程
- Filter
- Hook
- 可視編輯區域的函數工具
- 渲染字段函數
- 類庫和框架
- TDD 通過測試來驅動開發
- 編程范式對WordPress開發
- WordPress和WooCommerce的核心代碼類庫組成
- 數據庫修改
- 1.WP主題開發流程與時間規劃
- moho
- Note 1
- 基礎命令