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

</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
posted @ 2026-07-19 12:08  huangSir-devops  阅读(23)  评论(0)    收藏  举报
作者:你的名字
出处:你的博客链接
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。