maven使用详解

概述

这里只针对相关的运维人员做个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