本文講述Docker版maven構(gòu)建工具的使用,基于docker鏡像的便攜性,可以隨意切換maven工具的版本,來(lái)快速測(cè)試不同maven版本的特性
- docker版本 20.10.12
- maven鏡像版本 3.8.4-jdk-8
參考文檔:
https://hub.docker.com/_/maven
https://docs.docker.com/engine/reference/run/
入門使用方式
1.下載示例工程,以便構(gòu)建使用
git clone https://github.com/netbuffer/spring-boot-demo.git
我這里使用linux服務(wù)器直接將工程克隆到root目錄下
2.執(zhí)行構(gòu)建指令,來(lái)打包工程
docker run -it --rm -v /root/spring-boot-demo/:/spring-boot-demo -w /spring-boot-demo --name maven maven:3.8.4-jdk-8 mvn clean package -T 1C -Dmaven.test.skip=true -Dmaven.compile.fork=true



執(zhí)行命令后,經(jīng)過(guò)漫長(zhǎng)的等待,可以看到構(gòu)建成功了,進(jìn)入工程target目錄,可以看到構(gòu)建產(chǎn)物

命令解釋
-it 進(jìn)入容器交互終端
--rm 運(yùn)行完容器即刪除
-v 掛載數(shù)據(jù)卷,將我們之前下載的git倉(cāng)庫(kù)目錄掛載到容器內(nèi),以便maven執(zhí)行構(gòu)建
-w 指定容器默認(rèn)的工作目錄,容器中的mvn構(gòu)建命令會(huì)在此目錄下執(zhí)行
--name 設(shè)置容器名稱 也可以不設(shè)置,方便用于區(qū)分容器
鏡像后面填入maven的構(gòu)建命令,就可以實(shí)現(xiàn)基于maven鏡像的打包了
進(jìn)階使用方式
通過(guò)如上的構(gòu)建過(guò)程,我們會(huì)發(fā)現(xiàn),構(gòu)建過(guò)程中需要重復(fù)去遠(yuǎn)程下載依賴包,這個(gè)過(guò)程消耗了大量的時(shí)間;我們可以將容器中的maven倉(cāng)庫(kù)目錄掛載到宿主機(jī)中,這樣后續(xù)的構(gòu)建就能方便的重用本地已經(jīng)下載的依賴包了
通過(guò)-v參數(shù)來(lái)實(shí)現(xiàn)即可
docker run -it --rm -v /root/spring-boot-demo/:/spring-boot-demo -v /mnt/m2/repository:/root/.m2/repository -w /spring-boot-demo --name maven maven:3.8.4-jdk-8 mvn clean package -T 1C -Dmaven.test.skip=true -Dmaven.compile.fork=true
再次運(yùn)行構(gòu)建命令測(cè)試

對(duì)比之前的構(gòu)建結(jié)果可以看出,重用本地倉(cāng)庫(kù)后,免去重復(fù)下載依賴包的環(huán)節(jié),構(gòu)建速度明顯得以提升了
為了方便之后復(fù)用構(gòu)建命令,來(lái)構(gòu)建任意maven工程,可以將docker下的構(gòu)建命令封裝成shell腳本,編寫如下
#!/bin/bash
read -p "請(qǐng)輸入maven工程完整路徑:" project_path
docker run -it --rm -v ${project_path}/:/maven-project -v /mnt/m2/repository:/root/.m2/repository -w /maven-project --name maven maven:3.8.4-jdk-8 mvn clean package -T 1C -Dmaven.test.skip=true -Dmaven.compile.fork=true
echo "構(gòu)建完成,請(qǐng)查看工程target目錄的構(gòu)建產(chǎn)物"
chmod +x docker-maven-build.sh 給腳本添加執(zhí)行權(quán)限
./docker-maven-build.sh 執(zhí)行腳本,輸入maven工程路徑來(lái)構(gòu)建測(cè)試

