概述
这里只针对相关的运维人员做个maven的简单详解,相信 Java工程师都会下面的操作
Maven 是 Apache 软件基金会旗下的一款开源项目管理和构建自动化工具,主要用于 Java 项目的依赖管理、构建、测试、打包和部署。它通过标准化的构建流程和约定大于配置的理念,极大地简化了项目的管理和构建过程。
Maven 的核心优势
- 依赖管理:自动管理项目依赖,解决版本冲突和依赖传递问题
- 标准化构建流程:所有项目遵循统一的构建生命周期,降低学习成本
- 约定大于配置:提供默认的项目结构和构建配置,减少配置工作量
- 插件化架构:功能通过插件实现,可灵活扩展
- 仓库机制:统一管理依赖包,避免重复下载
- 多模块支持:轻松管理大型多模块项目
- 跨平台:基于 Java 开发,可在所有主流操作系统运行
Maven的核心概念:
- 坐标(Coordinate)
Maven 使用坐标来唯一标识一个项目或依赖包,坐标由以下几个部分组成:
-
-
groupId:组织或公司的唯一标识,通常是反向域名(如 org.apache.commons)
-
artifactId:项目或模块的名称(如 commons-lang3)
-
version:版本号(如 3.12.0)
-
packaging:打包方式(可选,默认 jar,可选值:jar、war、pom、ear、maven-plugin等)
-
classifier:分类器(可选,用于区分同一版本的不同构建,如 jdk17、sources、javadoc)
org.apache.commons commons-lang3 3.12.0
-
-
仓库(Repository)
Maven 仓库是存储所有 Maven 项目和依赖包的地方,分为三类:
-
- 本地仓库:存储在本地计算机上的仓库,默认路径 ~/.m2/repository
- 远程公共仓库:Maven 官方中央仓库( https://repo.maven.apache.org/maven2/ ),还有其他公共镜像如阿里云、华为云等
- 私有仓库:企业内部搭建的仓库,用于存储内部私有依赖包
Linux系统安装步骤:
maven官网下载地址:https://maven.apache.org/download.cgi
这里安装maven3.9.x版本,需要你的系统安装好jdk8或者更高的版本。
-
下载maven
下载
root@master:/data00/software# wget apache-maven-3.9.16-bin.tar.gz
解压
root@master:/data00/software# tar -xvf apache-maven-3.9.16-bin.tar.gz
创建软连接
root@master:/data00/software# ln -s /data00/software/apache-maven-3.9.16 /usr/local/maven
配置环境变量
root@master:~# echo MAVEN_HOME=/usr/local/maven >> /etc/profile
root@master:~# echo export PATH=PATH:MAVEN_HOME/bin >> /etc/profile
root@master:~# source /etc/profile测试
root@master:~# mvn --version
Apache Maven 3.9.16 (2bdd9fddda4b155ebf8000e807eb73fd829a51d5)
Maven home: /usr/local/maven
Java version: 11.0.18, vendor: ByteOpenJDK, runtime: /usr/lib/jvm/java-11-byteopenjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.4.143.bsk.8-amd64", arch: "amd64", family: "unix" -
修改maven配置文件
root@master:~# cat /usr/local/maven/conf/settings.xml
<!-- 本地仓库路径 --> <localRepository>/data00/maven/repository</localRepository> <mirrors> <!-- 阿里云全量镜像,包含release+snapshot --> <mirror> <id>aliyunmaven</id> <mirrorOf>central,snapshots</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors> <profiles> <profile> <id>jdk-8</id> <!-- 仅默认激活,不做jdk版本判断,避免切换JDK编译失效 --> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> <!-- 全局仓库(镜像已覆盖,这里仅兜底,可选保留) --> <repositories> <repository> <id>central</id> <url>https://repo1.maven.org/maven2</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <!-- 插件仓库,解决插件下载慢 --> <pluginRepositories> <pluginRepository> <id>central</id> <url>https://repo1.maven.org/maven2</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> -
创建本地仓库目录
root@master:~# mkdir -p /data00/maven/repository
maven常用命令
-
清理缓存,删除 target 目录,清除编译、打包生成的文件
mvn clean
-
编译源码,编译 src/main/java 下业务代码,生成 class 文件到 target
mvn compile
-
编译测试代码,编译 src/test/java 测试代码
mvn test-compile
-
执行单元测试,执行所有单元测试,生成测试报告
mvn test
-
跳过测试
mvn test -DskipTests
完全跳过测试代码编译与执行
mvn test -Dmaven.test.skip=true
-
打包,打成jar包编译 + 测试 + 打包,产物存放在 target
jar项目
mvn package
跳过测试代码编译与执行,直接打包,生产常用
mvn package -Dmaven.test.skip=true
-
安装到本地仓库,package + 将 jar/war 上传到本机 .m2/repository,本地其他项目可依赖
mvn install
-
发布到远程仓库,install + 上传到配置的远程仓库(pom 需配置 distributionManagement)
mvn deploy
-
生产常用的组合命令
清理+打包,跳过测试
mvn clean package -DskipTests
清理+安装本地仓库,跳过测试
mvn clean install -Dmaven.test.skip=true
清理+发布私服
mvn clean deploy -Dmaven.test.skip=true
测试编译ruoyi项目
root@master:/data00/gitcode# git clone https://gitee.com/y_project/RuoYi-Cloud.git
# 切换到springboot2分支
root@master:/data00/gitcode/RuoYi-Cloud# git checkout springboot2
Branch 'springboot2' set up to track remote branch 'springboot2' from 'origin'.
Switched to a new branch 'springboot2'
# 查看当前所在分支
root@master:/data00/gitcode/RuoYi-Cloud# git branch
master
* springboot2
root@master:/data00/gitcode/RuoYi-Cloud# cd ruoyi-modules/ruoyi-job/
root@master:/data00/gitcode/RuoYi-Cloud/ruoyi-modules/ruoyi-job# ll
total 8
-rw-r--r-- 1 root root 3064 Jul 16 17:12 pom.xml
drwxr-xr-x 3 root root 4096 Jul 16 17:10 src
# 开始打包
root@master:/data00/gitcode/RuoYi-Cloud# mvn clean package -Dmaven.test.skip=true
# 出现以下信息代表打包成功
[INFO] ruoyi .............................................. SUCCESS [ 1.904 s]
[INFO] ruoyi-common ....................................... SUCCESS [ 0.000 s]
[INFO] ruoyi-common-core .................................. SUCCESS [ 20.007 s]
[INFO] ruoyi-api .......................................... SUCCESS [ 0.001 s]
[INFO] ruoyi-api-system ................................... SUCCESS [ 0.218 s]
[INFO] ruoyi-common-redis ................................. SUCCESS [ 1.585 s]
[INFO] ruoyi-common-security .............................. SUCCESS [ 0.684 s]
[INFO] ruoyi-auth ......................................... SUCCESS [ 13.013 s]
[INFO] ruoyi-gateway ...................................... SUCCESS [ 5.026 s]
[INFO] ruoyi-visual ....................................... SUCCESS [ 0.000 s]
[INFO] ruoyi-visual-monitor ............................... SUCCESS [ 2.679 s]
[INFO] ruoyi-common-datasource ............................ SUCCESS [ 2.802 s]
[INFO] ruoyi-common-datascope ............................. SUCCESS [ 0.084 s]
[INFO] ruoyi-common-log ................................... SUCCESS [ 0.101 s]
[INFO] ruoyi-common-swagger ............................... SUCCESS [ 0.182 s]
[INFO] ruoyi-modules ...................................... SUCCESS [ 0.001 s]
[INFO] ruoyi-modules-system ............................... SUCCESS [ 1.155 s]
[INFO] ruoyi-modules-gen .................................. SUCCESS [ 0.698 s]
[INFO] ruoyi-modules-job .................................. SUCCESS [ 0.710 s]
[INFO] ruoyi-modules-file ................................. SUCCESS [ 3.951 s]
[INFO] ruoyi-common-seata ................................. SUCCESS [ 8.817 s]
[INFO] ruoyi-common-sensitive ............................. SUCCESS [ 0.105 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:06 min
[INFO] Finished at: 2026-07-16T17:28:09+08:00
[INFO] ------------------------------------------------------------------------
检查一下打包后的产物
root@master:/data00/gitcode/RuoYi-Cloud# ll ruoyi-modules/ruoyi-job/target/
total 94040
drwxr-xr-x 4 root root 4096 Jul 16 17:27 classes
drwxr-xr-x 3 root root 4096 Jul 16 17:27 generated-sources
drwxr-xr-x 2 root root 4096 Jul 16 17:27 maven-archiver
drwxr-xr-x 3 root root 4096 Jul 16 17:27 maven-status
# 这个jar包就是我们的产物
-rw-r--r-- 1 root root 96244098 Jul 16 17:27 ruoyi-modules-job.jar
-rw-r--r-- 1 root root 32607 Jul 16 17:27 ruoyi-modules-job.jar.original
查看本地仓库的内容
这些就是我们编译ruoyi时拉下来的产物了
root@master:~# ll /data00/maven/repository/
total 76
drwxr-xr-x 3 root root 4096 Jul 16 17:28 aopalliance
drwxr-xr-x 3 root root 4096 Jul 16 17:28 cglib
drwxr-xr-x 3 root root 4096 Jul 16 17:27 ch
drwxr-xr-x 22 root root 4096 Jul 16 17:28 com
drwxr-xr-x 3 root root 4096 Jul 16 17:27 commons-beanutils
drwxr-xr-x 3 root root 4096 Jul 16 17:27 commons-codec
drwxr-xr-x 3 root root 4096 Jul 16 17:27 commons-collections
drwxr-xr-x 3 root root 4096 Jul 16 17:27 commons-fileupload
drwxr-xr-x 3 root root 4096 Jul 16 17:27 commons-io
drwxr-xr-x 3 root root 4096 Jul 16 17:28 commons-lang
drwxr-xr-x 3 root root 4096 Jul 16 17:28 commons-pool
drwxr-xr-x 3 root root 4096 Jul 16 17:27 de
drwxr-xr-x 19 root root 4096 Jul 16 17:28 io
drwxr-xr-x 6 root root 4096 Jul 16 17:27 jakarta
drwxr-xr-x 6 root root 4096 Jul 16 17:27 javax
drwxr-xr-x 5 root root 4096 Jul 16 17:27 net
drwxr-xr-x 3 root root 4096 Jul 16 17:27 ognl
drwxr-xr-x 37 root root 4096 Jul 16 17:28 org
drwxr-xr-x 3 root root 4096 Jul 16 17:27 pro
补充,编译时可能会报错,执行下面的命令解决
# 导出证书
openssl s_client -connect maven.aliyun.com:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > aliyun.pem
# 导入到 cacerts,JAVA_HOME根据你自己的替换
keytool -import -alias aliyun -keystore $JAVA_HOME/jre/lib/security/cacerts -file aliyun.pem -storepass changeit -noprompt