Maven使用與學習
一、Maven是什么
-
maven像是一種管理的工具,實作的原理是使用插件,比如說,一個公司需要做一個專案,這個專案被分成了很多模塊,每個模塊又分成了許多的業務,這些最后都需要整合到一起,那么就會出現一個很大的問題,在專案開發中每個人使用的jar包版本、軟體版本等如果不一樣的話,就算單個模塊可以執行,一旦整合就會出現各種各樣的問題,那么如何避免這些問題或者最大程度上減少這種情況發生呢?那么就要用到maven,它更像是每個開發者從網上的一個中央倉庫獲取到開發所需要的jar包,并且可以把自己完成的專案打包發布到這個倉庫中,供其他開發人員使用,同時專案經理可以統一開發所需要的版本、jar包等,最大程度上減少這種非技術問題的情況發生,
-
Maven 字面意思:專家、內行
-
Maven是一款自動化構建工具,專注服務于Java平臺的專案構建和依賴管理,
-
依賴管理:jar之間的依賴關系,jar包管理問題統稱為依賴管理
-
專案構建:專案構建不等同于專案創建
- 專案構建是一個程序【7步驟組成】,專案創建是瞬間完成的
- 清理:mvn clean
- 編譯:mvn compile
- 測驗:mvn test
- 報告:
- 打包:mvn package
- 安裝:mvn install
- 部署:
- 專案構建是一個程序【7步驟組成】,專案創建是瞬間完成的
二、為什么使用maven
1.獲取jar包
- 使用Maven之前,自行在網路中下載jar包,效率較低,如【谷歌、百度、CSDN....】
- 使用Maven之后,統一在一個地址下載資源jar包【阿里云鏡像服務器等...】
2.添加jar包
-
使用maven之前,將jar復制到專案檔案中,相對浪費存盤空間
-
使用maven之后,jar包統一存盤到Maven本地倉庫,使用坐標方式把jar包引入到專案中
3.使用maven便于解決jar包沖突及依賴問題
三、Maven的POM
POM:Project Object Model【專案物件模型】,將專案封裝為物件模型,便于使用Maven管理【構建】專案
pom.xml:是maven的核心組態檔,一個maven專案有且只有一個
四、Maven的目錄結構
-
專案名
-
src【書寫java源代碼】
-
main【書寫java主程式代碼】
- java【書寫java代碼】
- resources【書寫組態檔代碼】
-
test【書寫測驗代碼】
- java【書寫測驗java代碼】
-
pom.xml【書寫組態檔代碼】
-
target【編譯后目錄結構】
-
-
五、Maven的生命周期
Maven生命周期:按照順序執行各個命令,Maven生命周期包含以下三個部分組成
- Clean LifeCycle:在進行真正的構建之前進行一些清理作業,
- Default LifeCycle:構建的核心部分,編譯,測驗,打包,安裝,部署等等,
- Site LifeCycle:生成專案報告,站點,發布站點,

六、Maven的插件和目標
- 插件:本質上由jar包和組態檔組成
- 目標:每個插件都能實作多個功能,每個功能就是一個插件目標,
七、Maven的倉庫【重要】
- 倉庫分類
- 本地倉庫:為當前計算機提供maven服務
- 遠程倉庫:為其他計算機也可以提供maven服務
- 私服:架設在當前局域網環境下,為當前局域網范圍內的所有Maven工程服務,
- 中央倉庫:架設在Internet上,為全世界所有Maven工程服務,
- 中央倉庫的鏡像:架設在各個大洲,為中央倉庫分擔流量,減輕中央倉庫的壓力,同時更快的回應用戶請求,
- 倉庫中的檔案型別【jar包】
- Maven的插件
- 第三方框架或工具的jar包
- 自己研發的專案或模塊
八、Maven的坐標【重要】
-
作用:使用坐標引入jar包
-
坐標由g-a-v組成
[1]groupId:公司或組織的域名倒序+當前專案名稱
[2]artifactId:當前專案的模塊名稱
[3]version:當前模塊的版本
-
注意
- g-a-v:本地倉庫jar包位置
- a-v:jar包全名
-
坐標應用
- 坐標參考網址:http://mvnrepository.com
<dependency>
<groupId>com.shujia</groupId>
<artifactId>mysql-demo2</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
九、依賴范圍
依賴語法:<scope>
- compile【默認值】:在main、test、Tomcat【服務器】下均有效,
- test:只能在test目錄下有效
- junit
- provided:在main、test下均有效,Tomcat【服務器】無效,
- servlet-api
十、依賴的傳遞性
- 路徑最短者優先【就進原則】
- 先宣告者優先
- 注意:Maven可以自動解決jar包之間的依賴問題
十一、Maven統一版本號
語法:
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<hadoop-version>2.7.6</hadoop-version>
</properties>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop-version}</version>
</dependency>
</dependencies>
十二、Maven的繼承
第一種方式
-
在父工程中的pom.xml中匯入jar包,在子工程中統一使用,【所有子工程強制引入父工程jar包】
- 父工程pom.xml依賴
<dependencies> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop-version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop-version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>${hadoop-version}</version> </dependency> </dependencies>子程序不寫任何依賴,自動引入父工程所有的包

第二種方式
使用
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop-version}</version>
</dependency>
在子工程引入父工程的相關jar包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
注意:在子工程中,不能指定版本號
十三、 Maven的聚合
為什么使用Maven的聚合
- 優勢:只要將子工程聚合到父工程中,就可以實作效果:安裝或清除父工程時,子工程會進行同步操作,
- 注意:Maven會按照依賴順序自動安裝子工程
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/501472.html
標籤:其他
上一篇:Centos7環境使用Mysql離線安裝包安裝Mysql5.7
下一篇:(Nosql)列式存盤是什么?
