maven使用详解 - huangSir
maven使用详解 - huangSir
概述#
这里只针对相关的运维人员做个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)
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
- 仓库(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
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd"> <!-- 本地仓库路径 -->
<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:class=class="hljs-string">"hljs-comment">//repo1.maven.org/maven2</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<!-- 插件仓库,解决插件下载慢 -->
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>https:class=class="hljs-string">"hljs-comment">//repo1.maven.org/maven2</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</settings>
- 创建本地仓库目录
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
评论