DevTools2026年7月19日· 约 21 分钟

maven使用详解 - huangSir

#Maven#构建工具#依赖管理#项目构建
Twitter 微博

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>

  &lt;!-- 全局仓库(镜像已覆盖,这里仅兜底,可选保留) --&gt;
  &lt;repositories&gt;
    &lt;repository&gt;
      &lt;id&gt;central&lt;/id&gt;
      &lt;url&gt;https:class=class="hljs-string">"hljs-comment">//repo1.maven.org/maven2&lt;/url&gt;
      &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
      &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
    &lt;/repository&gt;
  &lt;/repositories&gt;

  &lt;!-- 插件仓库,解决插件下载慢 --&gt;
  &lt;pluginRepositories&gt;
    &lt;pluginRepository&gt;
      &lt;id&gt;central&lt;/id&gt;
      &lt;url&gt;https:class=class="hljs-string">"hljs-comment">//repo1.maven.org/maven2&lt;/url&gt;
      &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
      &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
    &lt;/pluginRepository&gt;
  &lt;/pluginRepositories&gt;
&lt;/profile&gt;

</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

原文链接:https://www.cnblogs.com/huangSir-devops/p/21545266

评论

© 2026 松岛川树