Maven
-
Maven的本質是項目管理工具,將項目開發和管理過程抽象成一個項目對象模型(POM)
-
Project Object Model:項目對象管理模型
-
作用:
- 項目構建:提供標準的、跨平臺的自動化項目構建方式
- 依賴管理:方便快捷的管理項目依賴的資源(jarbao),避免資源間的版本沖突問題
1.下載與安裝
- 1.下載:在官網中找到對應版本的maven進行下載,解壓到需要安裝的目錄下即完成了安裝
- 2.配置:添加環境變量:
MAVEN_HOME
,以及在path中添加:%MAVEN_HOME%\bin
- 3.本地倉庫配置:在maven文件下找到conf文件夾,打開里面的
setting.xml
- 5.倉庫控制:
2.倉庫
- 用于存儲資源,包含各種jar包
3.坐標
- 用于描述倉庫中資源的位置
4.Maven工程制作
1)手動制作
1.Maven項目構建命令
- 項目結構:
5.Maven的IDEA生成
pom.xml
文件的說明:
<?xml version="1.0" encoding="UTF-8"?>
<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"><!--指定pom的模型版本--><modelVersion>4.0.0</modelVersion><!--打包方式,web工程打包為war,java工程打包為jar--><packaging>war</packaging><!--組織id--><groupId>com.itheima</groupId><!--項目id--><artifactId>web01</artifactId><!--版本號:release,snapshot--><version>1.0-SNAPSHOT</version><!--設置當前工程的所有依賴--><dependencies><!--具體的依賴--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies><!--構建--><build><!--設置插件--><plugins><!--具體的插件配置--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins></build></project>
6.依賴
1)依賴
- 指當前項目運行需要用到的jar包(指別人開發的資源模塊)
2)依賴傳遞
- 依賴具有傳遞性:
- 直接依賴:在當前項目中通過配置建立的依賴關系
- 間接依賴:被依賴的資源如果依賴其他資源,則當前項目是間接依賴其他資源的
1.依賴傳遞沖突
- 路徑優先:當依賴中出現相同的資源時,層級越深,優先級越低,層級越淺,優先級越高
- 聲明優先:當資源在相同層級被依賴時,配置順序靠前的資源覆蓋配置順序靠后的
- 特殊優先:當同級配置了相同資源的不同版本,則后配置的覆蓋先配置的
2.可選依賴
- 可選依賴指對外隱藏當前所依賴的資源–不透明
- 在配置資源時,添加:
<optional>true<optional>
在project03中對外隱藏對junit資源的依賴,在project02中能看到priject03依賴的其他資源,而無法看到project03對junit的依賴
3.排除依賴
- 排除依賴指主動斷開依賴的資源,被排除的資源無需指定版本
在project02中引入project03的依賴時,不需要用到project03的log4j資源時,在project02配置project03時添加需要排除的依賴名稱:這樣在project02中就不會傳遞project03中的log4j資源
4.依賴范圍
- 依賴的jar默認情況都可以使用,可以通過scope標簽設定作用范圍
- 作用范圍:
- 主程序范圍有效(main文件夾范圍內)
- 測試程序范圍有效(test文件夾范圍內)
- 是否參與打包(package指令范圍內)
依賴范圍傳遞
7.生命周期與插件
1)項目構建生命周期
-
生命周期:由項目編譯到安裝到maven庫中的一次構建過程
-
Maven對項目構建的生命周期分為三階段:
-
clean:
-
default:
-
site:
-
2)插件
- 插件與生命周期內的階段綁定,在執行到對應生命周期時執行對應的插件功能
- 默認maven在各個生命周期上綁定有預設的功能
- 通過插件可以自定義其他功能
在project03中配置插件,插件執行的階段為generate-test-resource,當運行test階段時,由于test在generate-test-resource階段后面,所以依然會執行插件的功能。
Maven高級
1.分模塊開發與設計
- 把一個大的項目,根據功能劃分為多個小的模塊
- 模塊中只包含當前模塊對應的功能類與配置文件
- spring核心配置根據模塊功能不同進行獨立制作
- 當前模塊所依賴的模塊通過導入坐標的形式加入當前模塊之后,并且安裝到本地maven倉庫中才可以使用
- web.xml需要加載所有的spring核心配置文件
-
1.ssm_pojo的拆分:
- 拷貝原始項目對應的相關內容到ssm_pojo模塊中
- 實體類
- 配置文件(無)
- 拷貝原始項目對應的相關內容到ssm_pojo模塊中
-
2.ssm_dao模塊的拆分:
- 拷貝項目中dao文件下的所有內容
- 對原始項目中其他bean的使用,比如使用到了ssm_pojo中的user類:
- 將ssm_pojo的坐標直接導入到pom.xml文件中,將ssm_pojo作為一個資源導入到ssm_dao模塊中
- 需要將ssm_pojo安裝到本地倉庫中 (install)
- 配置文件中需要使用到的依賴復制到ssm_dao的pom.xml文件
-
3.ssm_service模塊的拆分:
- 將service相關的文件從原始項目中復制下來
- 使用到了dao中的bean,于是將ssm_dao的模塊坐標導入到當前項目中:
- 將ssm_dao的坐標直接導入到pom.xml文件中,將ssm_dao作為一個資源導入到ssm_service模塊中
- 需要將ssm_dao安裝到本地倉庫中 (install)
- 配置文件中需要使用到的依賴復制到ssm_service的pom.xml文件
-
4.controller模塊拆分:
-
1.將模塊設置為web-app模板
2.聚合
- 當前項目結構中,所有模塊是層層嵌套的,如果中間某個模塊進行了更新,其他模塊如何將他們所依賴的模塊同步更新?
- 創建一個管理工程,只用作模塊的管理:操作當前模塊就能打包或者編譯它管理的所有模塊
- 在pom.xml中添加
<packaging>pom</packaging>
:定義該工程用于構建管理 - 再添加:
<modules></modules>
里面則放入需要管理的工程模塊名稱 - 相當于管理層,里面不包含任何代碼,只負責所有模塊的統一更新和版本升級
3.繼承
- 模塊依賴關系維護:多個模塊依賴的資源版本可能會有沖突
- 使用一個總的依賴版本管理:在總的管理中列舉所有依賴以及統一的版本,然后各個子模塊只用對應用到的模塊
<dependencyManagement></dependencyManagement>
- 在子模塊中,定義父工程的坐標:指定哪個是總的依賴項:
<parent></parent>
- 子模塊中去掉每個依賴的版本,全部是從父工程的依賴中獲取版本號,groupId也可以省略,與父工程是用一個group
4.繼承與聚合的對比
- 聚合:在父工程中可以明確知道有哪些模塊
- 繼承:父工程模塊無法找到哪些子模塊是繼承了自己,通常都是在子模塊中配置父工程坐標
5.屬性
- 我們定義一個自定義屬性
<properties></properties>
來統一版本名稱,統一管理依賴的版本
工程版本
資源配置
- 在對應模塊的pom.xml文件中定義對應的屬性,在
<build></build>
中配置文件對應信息,然后使用${}
獲取該屬性:在模塊配置文件中讀取核心配置中的屬性值(這樣就把所有配置屬性集中到核心配置中管理)
多環境開發配置
多環境兼容
當開發和生成時需要在不同的環境下進行時,可以在pom.xml中定義多環境:
比如在開發中是在自己的服務器上運行,而生成時則是在總的服務器上運行,就可以通過多環境設置不同環境下的屬性:
<!-- 創建多環境--><profiles>
<!-- 定義具體的環境:生成環境--><profile>
<!-- 定義環境對應的唯一名稱--><id>pro_env</id>
<!-- 定義環境中換用的屬性--><properties><jdbc.url>jdbc:mysql://120.55.43.71:3306/ssm_db</jdbc.url></properties></profile>
<!-- 定義具體的環境:開發環境--><profile><id>dep_env</id><properties><jdbc.url>jdbc:mysql://localhost:3306/ssm_db</jdbc.url></properties></profile></profiles>
- 在運行程序的打包時,就可以指定對應的環境從而完成在不同屬性環境下的打包:
跳過測試
6.私服
- 在公共服務器、中央服務器與本地倉庫中建立一種關系,使得多個開發人員能夠訪問到各自上傳的資源。
1.私服服務器
- 1.安裝:
- 2.運行:
- 復制到需要安裝的路徑下,解壓出來重命名為nexus:進入到
D:\nexus\nexus-3.20.1-01\bin
目錄下執行cmd,輸入nexus /run nexus
:啟動私服服務器
- 復制到需要安裝的路徑下,解壓出來重命名為nexus:進入到
- 3.訪問私服服務器:
localhost:8081
2.私服資源獲取
- 宿主倉庫:hosted
- 保存無法從中央倉庫獲取的資源
- 自主研發
- 第三方非開源項目
- 保存無法從中央倉庫獲取的資源
- 代理倉庫:proxy
- 代理遠程倉庫,通過nexus訪問其他公共倉庫,例如中央倉庫
- 倉庫組:group
- 將若干個倉庫組成一個群眾,簡化配置
- 倉庫組不能保存資源,屬于設計型倉庫
3.登錄私服服務器
-
1.創建hosted倉庫:
-
2.將當前hosted倉庫添加:
-
3.組件資源上傳:
4.ideal環境的資源上傳與下載
-
配置本地倉庫訪問私服的權限:用戶名+密碼配置
-
配置本地倉庫資源的來源:
-
也就是當需要用到資源時,從私服服務器的哪個地方下載:先是從中央倉庫找,如果中央倉庫找不到再從其他剩余倉庫找:
-
在IDEA中配置需要將對應的版本發布配置:
<distributionManagement><repository><id>heima-release</id><url>http://localhost:8081/repository/hiema-release/</url></repository><snapshotRepository><id>heima-snapshots</id><url>http://localhost:8081/repository/heima-snapshots/</url></snapshotRepository></distributionManagement>
-
其中:對應版本需要通過倉庫url發布到對應的倉庫上:
-
發布資源到私服命令:
mvn deploy
資源發布的流程
- 1.在IDEA中配置了對應資源發布倉庫的url:
- 如果是release的版本就會找到
<repository></repository>
中的url去訪問該倉庫地址 - 如果是snapshot的版本就會找到
<snapshotRepository> </snapshotRepository>
中的倉庫url訪問
- 如果是release的版本就會找到
- 2.由于有權限限制,于是會根據
id
去本地倉庫中配置的xml文件中找到對應id的<server></server>
然后根據配置的用戶名和密碼去訪問私服服務器 - 3.將資源發布到對應的倉庫里面
通過這樣的資源發布,可以將該私服服務器掛到一個云服務器上,然后在任何地方,任何一個人都可以將自己開發好的資源發布到該私服上,而其他人也可以在任意地方訪問該私服服務器,去下載同一個項目組中發布的資源,從而實現項目資源管理。
*注:上述內容來自黑馬程序員的視頻學習,僅用作學習交流,不用作商業用途,如有侵權,聯系刪除。