Maven是什么?
Maven 文檔
Maven 是一款為 Java 項(xiàng)目構(gòu)建管理、依賴(lài)管理的工具(軟件),使用 Maven 可以自動(dòng)化構(gòu)建、測(cè)試、打包和發(fā)布項(xiàng)目,大大提高了開(kāi)發(fā)效率和質(zhì)量。
依賴(lài)管理工具
一、Maven安裝和配置
maven下載版本
使用:apache-maven-3.6.3
- 軟件結(jié)構(gòu):
- 環(huán)境變量 命令行顯示版本
mvn -v
設(shè)置:
MAVEN_HOME
D:\Environment\apache-maven-3.6.3
%MAVEN_HOME%\bin
本地配置文件設(shè)置
-
maven/conf/settings.xml配置文件
依賴(lài)本地緩存位置(本地倉(cāng)庫(kù)位置)55行左右 - 配置國(guó)內(nèi)阿里鏡像
<!--在mirrors節(jié)點(diǎn)(標(biāo)簽)下添加中央倉(cāng)庫(kù)鏡像 160行附近-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
- 配置jdk17版本項(xiàng)目構(gòu)建
<!--在profiles節(jié)點(diǎn)(標(biāo)簽)下添加jdk編譯版本 268行附近-->
<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile>
idea配置本地maven
二、基于IDEA的Maven工程創(chuàng)建
2.1 Maven工程GAVP屬性
Maven工程相對(duì)之前的工程,多出一組gavp屬性,gav需要我們?cè)趧?chuàng)建項(xiàng)目的時(shí)指定,p有默認(rèn)值,后期通過(guò)配置文件修改。
Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四個(gè)屬性的縮寫(xiě),其中前三個(gè)是必要的,而 Packaging 屬性為可選項(xiàng)。
GAV遵循一下規(guī)則:
1) GroupID 格式:com.{公司/BU }.業(yè)務(wù)線(xiàn).[子業(yè)務(wù)線(xiàn)],最多 4 級(jí)。
說(shuō)明:{公司/BU} 例如:alibaba/taobao/tmall/aliexpress 等 BU 一級(jí);子業(yè)務(wù)線(xiàn)可選。
正例:com.taobao.tddl 或 com.alibaba.sourcing.multilang com.atguigu.java
2) ArtifactID 格式:產(chǎn)品線(xiàn)名-模塊名。語(yǔ)義不重復(fù)不遺漏,先到倉(cāng)庫(kù)中心去查證一下。
正例:tc-client / uic-api / tair-tool / bookstore
3) Version版本號(hào)格式推薦:主版本號(hào).次版本號(hào).修訂號(hào) 1.0.0
1) 主版本號(hào):當(dāng)做了不兼容的 API 修改,或者增加了能改變產(chǎn)品方向的新功能。
2) 次版本號(hào):當(dāng)做了向下兼容的功能性新增(新增類(lèi)、接口等)。
3) 修訂號(hào):修復(fù) bug,沒(méi)有修改方法簽名的功能加強(qiáng),保持 API 兼容性。
例如: 初始→1.0.0 修改bug → 1.0.1 功能調(diào)整 → 1.1.1等
Packaging定義規(guī)則:
指示將項(xiàng)目打包為什么類(lèi)型的文件,idea根據(jù)packaging值,識(shí)別maven項(xiàng)目類(lèi)型!
packaging 屬性為 jar(默認(rèn)值),代表普通的Java工程,打包以后是.jar結(jié)尾的文件。
packaging 屬性為 war,代表Java的web工程,打包以后.war結(jié)尾的文件。
packaging 屬性為 pom,代表不會(huì)打包,用來(lái)做繼承的父工程。
2.2 Idea構(gòu)建Maven JavaEE工程
注意:此處省略了version,直接給了一個(gè)默認(rèn)值<version>1.0-SNAPSHOT</version>
- 安裝插件JBLJavaToWeb
- 模塊 右鍵
出現(xiàn)這個(gè) 構(gòu)建完成
三、Maven工程項(xiàng)目結(jié)構(gòu)說(shuō)明
|-- pom.xml # Maven 項(xiàng)目管理文件
|-- src
|-- main # 項(xiàng)目主要代碼
| |-- java # Java 源代碼目錄
| | `-- com/example/myapp # 開(kāi)發(fā)者代碼主目錄
| | |-- controller # 存放 Controller 層代碼的目錄
| | |-- service # 存放 Service 層代碼的目錄
| | |-- dao # 存放 DAO 層代碼的目錄
| | `-- model # 存放數(shù)據(jù)模型的目錄
| |-- resources # 資源目錄,存放配置文件、靜態(tài)資源等
| | |-- log4j.properties # 日志配置文件
| | |-- spring-mybatis.xml # Spring Mybatis 配置文件
| | `-- static # 存放靜態(tài)資源的目錄
| | |-- css # 存放 CSS 文件的目錄
| | |-- js # 存放 JavaScript 文件的目錄
| | `-- images # 存放圖片資源的目錄
| `-- webapp # 存放 WEB 相關(guān)配置和資源
| |-- WEB-INF # 存放 WEB 應(yīng)用配置文件
| | |-- web.xml # Web 應(yīng)用的部署描述文件
| | `-- classes # 存放編譯后的 class 文件
| `-- index.html # Web 應(yīng)用入口頁(yè)面
`-- test # 項(xiàng)目測(cè)試代碼
|-- java # 單元測(cè)試目錄
`-- resources # 測(cè)試資源目錄
- pom.xml:Maven 項(xiàng)目管理文件,用于描述項(xiàng)目的依賴(lài)和構(gòu)建配置等信息。
- src/main/java:存放項(xiàng)目的 Java 源代碼。
- src/main/resources:存放項(xiàng)目的資源文件,如配置文件、靜態(tài)資源等。
- src/main/webapp/WEB-INF:存放 Web 應(yīng)用的配置文件。
- src/main/webapp/index.html:Web 應(yīng)用的入口頁(yè)面。
- src/test/java:存放項(xiàng)目的測(cè)試代碼。
- src/test/resources:存放測(cè)試相關(guān)的資源文件,如測(cè)試配置文件等。
四、Maven核心功能依賴(lài)和構(gòu)建管理
4.1 依賴(lài)管理和配置
- 通過(guò)定義 POM 文件,Maven 能夠自動(dòng)解析項(xiàng)目的依賴(lài)關(guān)系,
- 并通過(guò) Maven 倉(cāng)庫(kù)自動(dòng)下載和管理依賴(lài),
- 從而避免了手動(dòng)下載和管理依賴(lài)的繁瑣工作和可能引發(fā)的版本沖突問(wèn)題。
編寫(xiě)pom.xml文件
- maven項(xiàng)目信息屬性配置和讀?。?/li>
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者組織的唯一標(biāo)志,并且配置時(shí)生成的路徑也是由此生成, 如com.companyname.project-group,maven會(huì)將該項(xiàng)目打成的jar包放本地路徑:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目,就是靠artifactId來(lái)區(qū)分的 -->
<artifactId>project</artifactId>
<!-- 版本號(hào) -->
<version>1.0.0</version>
<!--打包方式
默認(rèn):jar
jar指的是普通的java項(xiàng)目打包方式! 項(xiàng)目打成jar包!
war指的是web項(xiàng)目打包方式!項(xiàng)目打成war包!
pom不會(huì)講項(xiàng)目打包!這個(gè)項(xiàng)目作為父工程,被其他工程聚合或者繼承!后面會(huì)講解兩個(gè)概念
-->
<packaging>jar/pom/war</packaging>
- 依賴(lài)管理和添加:
- maven倉(cāng)庫(kù)信息官網(wǎng)
- idea 插件:maven-search
- 使用
- 使用
<!--
通過(guò)編寫(xiě)依賴(lài)jar包的gav必要屬性,引入第三方依賴(lài)!
scope屬性是可選的,可以指定依賴(lài)生效范圍!
依賴(lài)信息查詢(xún)方式:
1. maven倉(cāng)庫(kù)信息官網(wǎng) https://mvnrepository.com/
2. mavensearch插件搜索
-->
<dependencies>
<!-- 引入具體的依賴(lài)包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<!--
生效范圍
- compile :main目錄 test目錄 打包打包 [默認(rèn)]
- provided:main目錄 test目錄 Servlet
- runtime: 打包運(yùn)行 MySQL
- test: test目錄 junit
-->
<scope>runtime</scope>
</dependency>
</dependencies>
- 依賴(lài)版本提取和維護(hù):
<!--聲明版本-->
<properties>
<!--命名隨便,內(nèi)部制定版本號(hào)即可!-->
<junit.version>4.11</junit.version>
<!-- 也可以通過(guò) maven規(guī)定的固定的key,配置maven的參數(shù)!如下配置編碼格式!-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!--引用properties聲明版本 -->
<version>${junit.version}</version>
</dependency>
</dependencies>
4.2 依賴(lài)傳遞和沖突
- 減少重復(fù)依賴(lài):當(dāng)多個(gè)項(xiàng)目依賴(lài)同一個(gè)庫(kù)時(shí),Maven 可以自動(dòng)下載并且只下載一次該庫(kù)。這樣可以減少項(xiàng)目的構(gòu)建時(shí)間和磁盤(pán)空間。
- 自動(dòng)管理依賴(lài): Maven 可以自動(dòng)管理依賴(lài)項(xiàng),使用依賴(lài)傳遞,簡(jiǎn)化了依賴(lài)項(xiàng)的管理,使項(xiàng)目構(gòu)建更加可靠和一致。
- 確保依賴(lài)版本正確性:通過(guò)依賴(lài)傳遞的依賴(lài),之間都不會(huì)存在版本兼容性問(wèn)題,確實(shí)依賴(lài)的版本正確性!
依賴(lài)傳遞 : 導(dǎo)入依賴(lài),會(huì)自動(dòng)導(dǎo)入依賴(lài)的依賴(lài)(compile dependenices)
簡(jiǎn)化依賴(lài)的導(dǎo)入 確保依賴(lài)的版本無(wú)沖突
依賴(lài)沖突: 發(fā)現(xiàn)已存在依賴(lài)(重復(fù)依賴(lài))會(huì)終止依賴(lài)傳遞!避免循環(huán)依賴(lài)和重復(fù)依賴(lài)的問(wèn)題!
依賴(lài)沖突的發(fā)生場(chǎng)景:重復(fù)依賴(lài)!
解決原則:
- 引用路徑長(zhǎng)度 更短
- 在上面的優(yōu)先 dependencies聲明的先后順序
4.3 依賴(lài)導(dǎo)入失敗場(chǎng)景和解決方案
可能會(huì)發(fā)生依賴(lài)項(xiàng)下載錯(cuò)誤的情況,主要原因有以下幾種:
- 下載依賴(lài)時(shí)出現(xiàn)網(wǎng)絡(luò)故障或倉(cāng)庫(kù)服務(wù)器宕機(jī)等原因,導(dǎo)致無(wú)法連接至 Maven 倉(cāng)庫(kù),從而無(wú)法下載依賴(lài)。
- 依賴(lài)項(xiàng)的版本號(hào)或配置文件中的版本號(hào)錯(cuò)誤,或者依賴(lài)項(xiàng)沒(méi)有正確定義,導(dǎo)致 Maven 下載的依賴(lài)項(xiàng)與實(shí)際需要的不一致,從而引發(fā)錯(cuò)誤。
- 本地 Maven 倉(cāng)庫(kù)或緩存被污染或損壞,導(dǎo)致 Maven 無(wú)法正確地使用現(xiàn)有的依賴(lài)項(xiàng),并且也無(wú)法重新下載!
解決方案:
- 檢查網(wǎng)絡(luò)連接和 Maven 倉(cāng)庫(kù)服務(wù)器狀態(tài)。
- 確保依賴(lài)項(xiàng)的版本號(hào)與項(xiàng)目對(duì)應(yīng)的版本號(hào)匹配,并檢查 POM 文件中的依賴(lài)項(xiàng)是否正確。
- 清除本地 Maven 倉(cāng)庫(kù)緩存(lastUpdated 文件),因?yàn)橹灰嬖趌astupdated緩存文件,刷新也不會(huì)重新下載。本地倉(cāng)庫(kù)中,根據(jù)依賴(lài)的gav屬性依次向下查找文件夾,最終刪除內(nèi)部的文件,刷新重新下載即可!
@echo off
rem 這里寫(xiě)你的倉(cāng)庫(kù)路徑
set REPOSITORY_PATH=D:\Environment\openrepository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
del /s /q %%i
)
rem 搜索完畢
pause
使用記事本打開(kāi)
set REPOSITORY_PATH=D:\repository 改成你本地倉(cāng)庫(kù)地址即可!
點(diǎn)擊運(yùn)行腳本,即可自動(dòng)清理本地錯(cuò)誤緩存文件??!
4.4 擴(kuò)展構(gòu)建管理和插件配置
項(xiàng)目構(gòu)建是指將源代碼、依賴(lài)庫(kù)和資源文件等轉(zhuǎn)換成可執(zhí)行或可部署的應(yīng)用程序的過(guò)程,在這個(gè)過(guò)程中包括編譯源代碼、鏈接依賴(lài)庫(kù)、打包和部署等多個(gè)步驟。
主動(dòng)觸發(fā)場(chǎng)景:
- 重新編譯 : 編譯不充分, 部分文件沒(méi)有被編譯!
- 打包 : 獨(dú)立部署到外部服務(wù)器軟件,打包部署
- 部署本地或者私服倉(cāng)庫(kù) : maven工程加入到本地或者私服倉(cāng)庫(kù),供其他工程使用
命令方式構(gòu)建:
語(yǔ)法: mvn 構(gòu)建命令 構(gòu)建命令…
命令 | 描述 |
---|---|
mvn clean | 清理編譯或打包后的項(xiàng)目結(jié)構(gòu),刪除target文件夾 |
mvn compile | 編譯項(xiàng)目,生成target文件 |
mvn test | 執(zhí)行測(cè)試源碼 (測(cè)試) |
mvn site | 生成一個(gè)項(xiàng)目依賴(lài)信息的展示頁(yè)面 |
mvn package | 打包項(xiàng)目,生成war / jar 文件 |
mvn install | 打包后上傳到maven本地倉(cāng)庫(kù)(本地部署) |
mvn deploy | 只打包,上傳到maven私服倉(cāng)庫(kù)(私服部署) |
可視化方式構(gòu)建:
構(gòu)建命令周期:
構(gòu)建生命周期可以理解成是一組固定構(gòu)建命令的有序集合,觸發(fā)周期后的命令,會(huì)自動(dòng)觸發(fā)周期前的命令!也是一種簡(jiǎn)化構(gòu)建的思路!
-
清理周期:主要是對(duì)項(xiàng)目編譯生成文件進(jìn)行清理
包含命令:clean
-
默認(rèn)周期:定義了真正構(gòu)件時(shí)所需要執(zhí)行的所有步驟,它是生命周期中最核心的部分
包含命令:compile - test - package - install / deploy
-
報(bào)告周期
包含命令:site
打包: mvn clean package 本地倉(cāng)庫(kù): mvn clean install
最佳使用方案:
打包: mvn clean package
重新編譯: mvn clean compile
本地部署: mvn clean install
周期,命令和插件:
周期→包含若干命令→包含若干插件!
使用周期命令構(gòu)建,簡(jiǎn)化構(gòu)建過(guò)程!
最終進(jìn)行構(gòu)建的是插件!
插件配置:
<build>
<!-- jdk17 和 war包版本插件不匹配 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
</plugins>
</build>
五、Maven繼承和聚合特性
5.1 Maven工程繼承關(guān)系
Maven 繼承是指在 Maven 的項(xiàng)目中,讓一個(gè)項(xiàng)目從另一個(gè)項(xiàng)目中繼承配置信息的機(jī)制。
多個(gè)項(xiàng)目中共享同一配置信息,簡(jiǎn)化項(xiàng)目的管理和維護(hù)工作。作用:在父工程中統(tǒng)一管理項(xiàng)目中的依賴(lài)信息,進(jìn)行統(tǒng)一版本管理!
背景:
- 對(duì)一個(gè)比較大型的項(xiàng)目進(jìn)行了模塊拆分。
- 一個(gè) project 下面,創(chuàng)建了很多個(gè) module。
- 每一個(gè) module 都需要配置自己的依賴(lài)信息。
需求:
- 多個(gè)模塊要使用同一個(gè)框架,它們應(yīng)該是同一個(gè)版本,所以整個(gè)項(xiàng)目中使用的框架版本需要統(tǒng)一管理。
- 使用框架時(shí)所需要的 jar 包組合(或者說(shuō)依賴(lài)信息組合)需要經(jīng)過(guò)長(zhǎng)期摸索和反復(fù)調(diào)試,最終確定一個(gè)可用組合。這個(gè)耗費(fèi)很大精力總結(jié)出來(lái)的方案不應(yīng)該在新的項(xiàng)目中重新摸索。
通過(guò)在父工程中為整個(gè)項(xiàng)目維護(hù)依賴(lài)信息的組合既保證了整個(gè)項(xiàng)目使用規(guī)范、準(zhǔn)確的 jar 包;又能夠?qū)⒁酝慕?jīng)驗(yàn)沉淀下來(lái),節(jié)約時(shí)間和精力。
繼承語(yǔ)法:
- 父工程:
<groupId>com.doug.maven</groupId>
<artifactId>pro03-maven-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 當(dāng)前工程作為父工程,它要去管理子工程,所以打包方式必須是 pom -->
<packaging>pom</packaging>
- 子工程:
<!-- 使用parent標(biāo)簽指定當(dāng)前工程的父工程 -->
<parent>
<!-- 父工程的坐標(biāo) -->
<groupId>com.doug.maven</groupId>
<artifactId>pro03-maven-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- 子工程的坐標(biāo) -->
<!-- 如果子工程坐標(biāo)中的groupId和version與父工程一致,那么可以省略 -->
<!-- <groupId>com.doug.maven</groupId> -->
<artifactId>pro04-maven-module</artifactId>
<!-- <version>1.0-SNAPSHOT</version> -->
父工程依賴(lài)統(tǒng)一管理:
- 父工程聲明版本
<!-- 使用dependencyManagement標(biāo)簽配置對(duì)依賴(lài)的管理 -->
<!-- 被管理的依賴(lài)并沒(méi)有真正被引入到工程 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
- 子工程引用版本
<!-- 子工程引用父工程中的依賴(lài)信息時(shí),可以把版本號(hào)去掉。 -->
<!-- 把版本號(hào)去掉就表示子工程中這個(gè)依賴(lài)的版本由父工程決定。 -->
<!-- 具體來(lái)說(shuō)是由父工程的dependencyManagement來(lái)決定。 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
</dependencies>
5.2 Maven工程聚合關(guān)系
Maven 聚合是指將多個(gè)項(xiàng)目組織到一個(gè)父級(jí)項(xiàng)目中,通過(guò)觸發(fā)父工程的構(gòu)建,統(tǒng)一按順序觸發(fā)子工程構(gòu)建的過(guò)程!
- 統(tǒng)一管理子項(xiàng)目構(gòu)建:通過(guò)聚合,可以將多個(gè)子項(xiàng)目組織在一起,方便管理和維護(hù)。
- 優(yōu)化構(gòu)建順序:通過(guò)聚合,可以對(duì)多個(gè)項(xiàng)目進(jìn)行順序控制,避免出現(xiàn)構(gòu)建依賴(lài)混亂導(dǎo)致構(gòu)建失敗的情況。
聚合語(yǔ)法:
父項(xiàng)目中包含的子項(xiàng)目列表。
<project>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<modules>
<module>child-project1</module>
<module>child-project2</module>
</modules>
</project>
通過(guò)觸發(fā)父工程構(gòu)建命令、引發(fā)所有子模塊構(gòu)建!產(chǎn)生反應(yīng)堆!
六、Maven實(shí)戰(zhàn)案例:搭建微服務(wù)Maven工程架構(gòu)
6.1 項(xiàng)目需求和結(jié)構(gòu)分析
需求案例:搭建一個(gè)電商平臺(tái)項(xiàng)目,該平臺(tái)包括用戶(hù)服務(wù)、訂單服務(wù)、通用工具模塊等。
項(xiàng)目架構(gòu):
- 用戶(hù)服務(wù):負(fù)責(zé)處理用戶(hù)相關(guān)的邏輯,例如用戶(hù)信息的管理、用戶(hù)注冊(cè)、登錄等。
- 訂單服務(wù):負(fù)責(zé)處理訂單相關(guān)的邏輯,例如訂單的創(chuàng)建、訂單支付、退貨、訂單查看等。
- 通用模塊:負(fù)責(zé)存儲(chǔ)其他服務(wù)需要通用工具類(lèi),其他服務(wù)依賴(lài)此模塊。
服務(wù)依賴(lài):
- 用戶(hù)服務(wù) (1.0.1)
- spring-context 6.0.6
- spring-core 6.0.6
- spring-beans 6.0.6
- jackson-databind / jackson-core / jackson-annotations 2.15.0
- 訂單服務(wù) (1.0.1)
- shiro-core 1.10.1
- spring-context 6.0.6
- spring-core 6.0.6
- spring-beans 6.0.6
- 通用模塊 (1.0.1)
- commons-io 2.11.0
6.2 項(xiàng)目搭建和統(tǒng)一構(gòu)建
父模塊搭建 (micro-shop)
- 父模塊 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.doug</groupId>
<artifactId>micro-shop</artifactId>
<version>1.0.1</version>
<modules>
<module>user-service</module>
</modules>
<!-- 父工程不打包,所以選擇pom值-->
<packaging>pom</packaging>
<properties>
<spring.version>6.0.6</spring.version>
<jackson.version>2.15.0</jackson.version>
<shiro.version>1.10.1</shiro.version>
<commons.version>2.11.0</commons.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依賴(lài)管理 -->
<dependencyManagement>
<dependencies>
<!-- spring-context會(huì)依賴(lài)傳遞core/beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- jackson-databind會(huì)依賴(lài)傳遞core/annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- shiro-core -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>${shiro.version}</version>
</dependency>
<!-- commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 父工程添加依賴(lài),會(huì)自動(dòng)傳遞給所有子工程,不推薦! -->
</dependencies>
<!-- 統(tǒng)一更新子工程打包插件-->
<build>
<!-- jdk17 和 war包版本插件不匹配 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
</plugins>
</build>
</project>
刪除src 只留pom
子模塊搭建 (user-service)
轉(zhuǎn)為web:
pom設(shè)置:
<?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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>micro-shop</artifactId>
<groupId>com.doug</groupId>
<version>1.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>user-service</artifactId>
<packaging>war</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 添加spring-context 自動(dòng)傳遞 core / beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- 添加jackson-databind 自動(dòng)傳遞 core / annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
</project>
- 子模塊 訂單模塊 (order-service)
pom :
<?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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>micro-shop</artifactId>
<groupId>com.doug</groupId>
<version>1.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>order-service</artifactId>
<packaging>war</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 繼承父工程依賴(lài)版本 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- 繼承父工程依賴(lài)版本 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
</dependency>
</dependencies>
</project>
- 子模塊 通用模塊 (common-service)
<?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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>micro-shop</artifactId>
<groupId>com.doug</groupId>
<version>1.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-service</artifactId>
<!-- 打包方式默認(rèn)就是jar! -->
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 聲明commons-io,繼承父工程版本 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
</dependencies>
</project>
項(xiàng)目下 模塊的依賴(lài)
install 需要的依賴(lài)模塊 -> common-service
需要引用當(dāng)前項(xiàng)目 下的 模塊作為依賴(lài) 就得導(dǎo)出模塊為jar , 再由要導(dǎo)入依賴(lài)的模塊添加dependency
另外兩個(gè)模塊的pom添加模塊依賴(lài):
<dependency>
<groupId>com.doug</groupId>
<artifactId>common-service</artifactId>
</dependency>
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-832784.html
總結(jié)
核心點(diǎn) | 掌握目標(biāo) |
---|---|
安裝 | maven安裝、環(huán)境變量、maven配置文件修改 |
工程創(chuàng)建 | gavp屬性理解、JavaSE/EE工程創(chuàng)建、項(xiàng)目結(jié)構(gòu) |
依賴(lài)管理 | 依賴(lài)添加、依賴(lài)傳遞、版本提取、導(dǎo)入依賴(lài)錯(cuò)誤解決 |
構(gòu)建管理 | 構(gòu)建過(guò)程、構(gòu)建場(chǎng)景、構(gòu)建周期等 |
繼承和聚合 | 理解繼承和聚合作用、繼承語(yǔ)法和實(shí)踐、聚合語(yǔ)法和實(shí)踐 |
構(gòu)建周期:
shangguigu-SSM-筆記文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-832784.html
到了這里,關(guān)于【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!