一 分模塊開發(fā)與設(shè)計(jì)
1. 分模塊開發(fā)的意義
問題導(dǎo)入
分模塊開發(fā)對工程有什么好處?
模塊拆分原則
目的:項(xiàng)目的擴(kuò)展性變強(qiáng)了,方便其他項(xiàng)目引用相同的功能。
- 將原始模塊按照功能拆分成若干個(gè)子模塊,方便模塊間的相互調(diào)用,接口共享
2. 分模塊開發(fā)
問題導(dǎo)入
一個(gè)完整的工程依據(jù)什么來進(jìn)行模塊的拆分?
2.1 創(chuàng)建Maven模塊
2.2 書寫模塊代碼
- 注意事項(xiàng):
- 分模塊開發(fā)需要先針對模塊功能進(jìn)行設(shè)計(jì),再進(jìn)行編碼。不會(huì)先將工程開發(fā)完畢,然后進(jìn)行拆分
2.3 通過maven指令安裝模塊到本地倉庫(install指令)
mvn install
- 注意事項(xiàng):
- 團(tuán)隊(duì)內(nèi)部開發(fā)需要發(fā)布模塊功能到團(tuán)隊(duì)內(nèi)部可共享的倉庫中(私服)
二 依賴管理
- 依賴管理指當(dāng)前項(xiàng)目運(yùn)行所需的jar,一個(gè)項(xiàng)目可以設(shè)置多個(gè)依賴
- 格式:
<!--設(shè)置當(dāng)前項(xiàng)目所依賴的所有jar-->
<dependencies>
<!--設(shè)置具體的依賴-->
<dependency>
<!--依賴所屬群組id-->
<groupId>org.springframework</groupId>
<!--依賴所屬項(xiàng)目id-->
<artifactId>spring-webmvc</artifactId>
<!--依賴版本號-->
<version>5.3.18</version>
</dependency>
</dependencies>
1. 依賴傳遞
問題導(dǎo)入
A依賴B,B依賴C,A是否依賴于C呢?
-
依賴具有傳遞性
- 直接依賴:在當(dāng)前項(xiàng)目中通過依賴配置建立的依賴關(guān)系
- 間接依賴:被資源的資源如果依賴其他資源,當(dāng)前項(xiàng)目間接依賴其他資源
-
依賴傳遞沖突問題
- 路徑優(yōu)先:當(dāng)依賴中出現(xiàn)相同的資源時(shí),層級越深,優(yōu)先級越低,層級越淺,優(yōu)先級越高
- 聲明優(yōu)先:當(dāng)資源在相同層級被依賴時(shí),配置順序靠前的覆蓋配置順序靠后的
- 特殊優(yōu)先:當(dāng)同級配置了相同資源的不同版本,后配置的覆蓋先配置的
2. 可選依賴
問題導(dǎo)入
A依賴B,B依賴C,如果A不想將C依賴進(jìn)來,是否可以做到?
- 可選依賴指對外隱藏當(dāng)前所依賴的資源————不透明
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven_03_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
<!--可選依賴是隱藏當(dāng)前工程所依賴的資源,隱藏后對應(yīng)資源將不具有依賴傳遞性-->
<optional>false</optional>
</dependency>
3. 排除依賴
問題導(dǎo)入
A依賴B,B依賴C,如果A不想將C依賴進(jìn)來,是否可以做到?
- 排除依賴指主動(dòng)斷開依賴的資源,被排除的資源無需指定版本————不需要
- 排除依賴資源僅指定GA即可,無需指定V
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven_04_dao</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依賴是隱藏當(dāng)前資源對應(yīng)的依賴關(guān)系-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
4 可選依賴和排除依賴的區(qū)別
三 聚合與繼承
1. 聚合工程
問題導(dǎo)入
什么叫聚合?
- 聚合:將多個(gè)模塊組織成一個(gè)整體,同時(shí)進(jìn)行項(xiàng)目構(gòu)建的過程稱為聚合
- 聚合工程:通常是一個(gè)不具有業(yè)務(wù)功能的”空“工程(有且僅有一個(gè)pom文件)
- 作用:使用聚合工程可以將多個(gè)工程編組,通過對聚合工程進(jìn)行構(gòu)建,實(shí)現(xiàn)對所包含的模塊進(jìn)行同步構(gòu)建
- 當(dāng)工程中某個(gè)模塊發(fā)生更新(變更)時(shí),必須保障工程中與已更新模塊關(guān)聯(lián)的模塊同步更新,此時(shí)可以使用聚合工程來解決批量模塊同步構(gòu)建的問題
2. 聚合工程開發(fā)
問題導(dǎo)入
工程的打包方式有哪幾種?
2.1 創(chuàng)建Maven模塊,設(shè)置打包類型為pom
<packaging>pom</packaging>
- 注意事項(xiàng):
- 每個(gè)maven工程都有對應(yīng)的打包方式,默認(rèn)為jar,web工程打包方式為war
2.2 設(shè)置當(dāng)前聚合工程所包含的子模塊名稱
<!--設(shè)置管理的模塊名稱-->
<modules>
<module>../maven_02_ssm</module>
<module>../maven_03_pojo</module>
<module>../maven_04_dao</module>
</modules>
- 注意事項(xiàng):
- 聚合工程中所包含的模塊在進(jìn)行構(gòu)建時(shí)會(huì)根據(jù)模塊間的依賴關(guān)系設(shè)置構(gòu)建順序,與聚合工程中模塊的配置書寫位置無關(guān)。
- 參與聚合的工程無法向上感知是否參與聚合,只能向下配置哪些模塊參與本工程的聚合。
3. 繼承關(guān)系
問題導(dǎo)入
什么叫繼承?
- 概念:
- 繼承描述的是兩個(gè)工程間的關(guān)系,與java中的繼承相似,子工程可以繼承父工程中的配置信息,常見于依賴關(guān)系的繼承
- 作用:
- 簡化配置
- 減少版本沖突
4. 繼承關(guān)系開發(fā)
4.1 創(chuàng)建Maven模塊,設(shè)置打包類型為pom
<packaging>pom</packaging>
- 注意事項(xiàng):
- 建議父工程打包方式設(shè)置為pom
4.2 在父工程的pom文件中配置依賴關(guān)系(子工程將沿用父工程中的依賴關(guān)系)
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
……
</dependencies>
4.3 配置子工程中可選的依賴關(guān)系
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
……
</dependencies>
</dependencyManagement>
4.3 在子工程中配置當(dāng)前工程所繼承的父工程
<!--定義該工程的父工程-->
<parent>
<groupId>com.itheima</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--填寫父工程的pom文件,根據(jù)實(shí)際情況填寫-->
<relativePath>../maven_parent/pom.xml</relativePath>
</parent>
4.5 在子工程中配置使用父工程中可選依賴的坐標(biāo)
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
</dependencies>
- 注意事項(xiàng):
- 子工程中使用父工程中的可選依賴時(shí),僅需要提供群組id和項(xiàng)目id,無需提供版本,版本由父工程統(tǒng)一提供,避免版本沖突
- 子工程中還可以定義父工程中沒有定義的依賴關(guān)系
5. 聚合與繼承的區(qū)別
問題導(dǎo)入
聚合和繼承的作用?
- 作用
- 聚合用于快速構(gòu)建項(xiàng)目
- 繼承用于快速配置
- 相同點(diǎn):
- 聚合與繼承的pom.xml文件打包方式均為pom,可以將兩種關(guān)系制作到同一個(gè)pom文件中
- 聚合與繼承均屬于設(shè)計(jì)型模塊,并無實(shí)際的模塊內(nèi)容
- 不同點(diǎn):
- 聚合是在當(dāng)前模塊中配置關(guān)系,聚合可以感知到參與聚合的模塊有哪些
- 繼承是在子模塊中配置關(guān)系,父模塊無法感知哪些子模塊繼承了自己
四 屬性管理
1. 屬性
問題導(dǎo)入
定義屬性有什么好處?
1.1 屬性配置與使用
①:定義屬性
<!--定義自定義屬性-->
<properties>
<spring.version>5.2.10.RELEASE</spring.version>
<junit.version>4.12</junit.version>
</properties>
②:引用屬性
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
1.2 資源文件引用屬性
①:定義屬性
<!--定義自定義屬性-->
<properties>
<spring.version>5.2.10.RELEASE</spring.version>
<junit.version>4.12</junit.version>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true</jdbc.url>
</properties>
②:配置文件中引用屬性
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/ssm_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
db.username=root
db.password=root
③:開啟資源文件目錄加載屬性的過濾器
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
④:配置maven打war包時(shí),忽略web.xml檢查
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
1.3 其他屬性
- 屬性列表
- 自定義屬性(常用)
- 內(nèi)置屬性
- Setting屬性
- Java系統(tǒng)屬性
- 環(huán)境變量屬性
2. 版本管理
問題導(dǎo)入
項(xiàng)目開發(fā)的版本可以分為哪幾種?
2.1 工程版本
- SNAPSHOT(快照版本)
- 項(xiàng)目開發(fā)過程中臨時(shí)輸出的版本,稱為快照版本
- 快照版本會(huì)隨著開發(fā)的進(jìn)展不斷更新
- RELEASE(發(fā)布版本)
- 項(xiàng)目開發(fā)到進(jìn)入階段里程碑后,向團(tuán)隊(duì)外部發(fā)布較為穩(wěn)定的版本,這種版本所對應(yīng)的構(gòu)件文件是穩(wěn)定的
- 即便進(jìn)行功能的后續(xù)開發(fā),也不會(huì)改變當(dāng)前發(fā)布版本內(nèi)容,這種版本稱為發(fā)布版本
2.2 發(fā)布版本
- alpha版
- beta版
- 純數(shù)字版
五 多環(huán)境配置與應(yīng)用
1. 多環(huán)境配置作用
問題導(dǎo)入
多環(huán)境配置有什么好處?
- maven提供配置多種環(huán)境的設(shè)定,幫助開發(fā)者使用過程中快速切換環(huán)境
2. 多環(huán)境配置步驟
2.1 定義多環(huán)境
<!--定義多環(huán)境-->
<profiles>
<!--定義具體的環(huán)境:生產(chǎn)環(huán)境-->
<profile>
<!--定義環(huán)境對應(yīng)的唯一名稱-->
<id>env_dep</id>
<!--定義環(huán)境中專用的屬性值-->
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true</jdbc.url>
</properties>
<!--設(shè)置默認(rèn)啟動(dòng)-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--定義具體的環(huán)境:開發(fā)環(huán)境-->
<profile>
<id>env_pro</id>
……
</profile>
</profiles>
2.2 使用多環(huán)境(構(gòu)建過程)
【命令】:
mvn 指令 –P 環(huán)境定義id
【范例】:
mvn install –P pro_env
2. 跳過測試
問題導(dǎo)入
跳過測試會(huì)不會(huì)影響項(xiàng)目的構(gòu)建過程?
2.1 應(yīng)用場景
- 功能更新中并且沒有開發(fā)完畢
- 快速打包
- ……
2.2 跳過測試命令
mvn install –D skipTests
- 注意事項(xiàng):
- 執(zhí)行的項(xiàng)目構(gòu)建指令必須包含測試生命周期,否則無效果。例如執(zhí)行compile生命周期,不經(jīng)過test生命周期。
2.3 細(xì)粒度控制跳過測試
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<skipTests>true</skipTests>
<!--設(shè)置跳過測試-->
<includes>
<!--包含指定的測試用例-->
<include>**/User*Test.java</include>
</includes>
<excludes>
<!--排除指定的測試用例-->
<exclude>**/User*TestCase.java</exclude>
</excludes>
</configuration>
</plugin>
六 私服
1. 私服介紹
問題導(dǎo)入
這里的私服和平時(shí)我們聽的國服、體驗(yàn)服、歐服等等有什么區(qū)別?
1.1 介紹
- 團(tuán)隊(duì)開發(fā)現(xiàn)狀分析
- 私服是一臺獨(dú)立的服務(wù)器,用于解決團(tuán)隊(duì)內(nèi)部的資源共享與資源同步問題
- Nexus
- Sonatype公司的一款maven私服產(chǎn)品
- 下載地址:https://help.sonatype.com/repomanager3/download
1.2 Nexus安裝與啟動(dòng)
- 安裝
- 直接解壓即可
- 啟動(dòng)服務(wù)器(命令行啟動(dòng))
- nexus.exe /run nexus
- 訪問服務(wù)器(默認(rèn)端口:8081)
- http://localhost:8081
- 修改基礎(chǔ)配置信息
- 安裝路徑下etc目錄中nexus-default.properties文件保存有nexus基礎(chǔ)配置信息,例如默認(rèn)訪問端口。
- 安裝路徑下etc目錄中nexus-default.properties文件保存有nexus基礎(chǔ)配置信息,例如默認(rèn)訪問端口。
- 修改服務(wù)器運(yùn)行配置信息
- 安裝路徑下bin目錄中nexus.vmoptions文件保存有nexus服務(wù)器啟動(dòng)對應(yīng)的配置信息,例如默認(rèn)占用內(nèi)存空間。
- 安裝路徑下bin目錄中nexus.vmoptions文件保存有nexus服務(wù)器啟動(dòng)對應(yīng)的配置信息,例如默認(rèn)占用內(nèi)存空間。
1.3 私服資源操作流程分析
2. 私服倉庫分類
問題導(dǎo)入
私服倉庫分為哪幾種?
3. 資源上傳與下載
問題導(dǎo)入
往私服上傳資源是否需要身份認(rèn)證?在哪里設(shè)置認(rèn)證信息?
3.1 從私服中下載依賴
【第一步】在maven的settings.xml中<mirrors>標(biāo)簽中配置,此時(shí)就需要注釋掉aliyun的配置。
<mirror>
<id>nexus-heima</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
【第二步】在nexus中設(shè)置允許匿名下載,如果不允許將不會(huì)從私服中下載依賴
如果私服中沒有對應(yīng)的jar,會(huì)去中央倉庫下載,速度很慢??梢耘渲米屗椒グ⒗镌浦邢螺d依賴。
3.2 上傳依賴到私服中
【第一步】配置本地倉庫訪問私服的權(quán)限(在maven的settings.xml的servers標(biāo)簽中配置)
<server>
<!--id任意,多個(gè)server的id不重復(fù)就行,后面會(huì)用到-->
<id>heima-nexus</id>
<username>admin</username>
<password>admin</password><!--填寫自己nexus設(shè)定的登錄秘密-->
</server>
【第二步】配置當(dāng)前項(xiàng)目訪問私服上傳資源的保存位置(項(xiàng)目的pom.xml文件中配置)文章來源:http://www.zghlxwxcb.cn/news/detail-702596.html
<distributionManagement>
<repository>
<!--和maven/settings.xml中server中的id一致,表示使用該id對應(yīng)的用戶名和密碼-->
<id>heima-nexus</id>
<!--如果jar的版本是release版本,那么就上傳到這個(gè)倉庫,根據(jù)自己情況修改-->
<url>http://localhost:8081/repository/heima-releases/</url>
</repository>
<snapshotRepository>
<!--和maven/settings.xml中server中的id一致,表示使用該id對應(yīng)的用戶名和密碼-->
<id>heima-nexus</id>
<!--如果jar的版本是snapshot版本,那么就上傳到這個(gè)倉庫,根據(jù)自己情況修改-->
<url>http://localhost:8081/repository/heima-snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意:要和maven的settings.xml中server中定義的<id>heima-nexus</id>對應(yīng)
【第三步】發(fā)布資源到私服命令文章來源地址http://www.zghlxwxcb.cn/news/detail-702596.html
mvn deploy
到了這里,關(guān)于DAY07_Maven高級——分模塊開發(fā)與設(shè)計(jì)&依賴管理&聚合與繼承&屬性管理&多環(huán)境配置與應(yīng)用&私服的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!