Skip to content

Maven 基础教程

Maven 是 Java 项目中最常用的构建工具和依赖管理工具。本文简要介绍 Maven 的远程仓库配置及常用命令。

1. 远程仓库配置 (镜像设置)

由于 Maven 中央仓库服务器在国外,国内访问速度较慢,通常需要配置国内镜像(如阿里云镜像)来加速依赖下载。

全局配置 (settings.xml)

找到 Maven 安装目录下的 conf/settings.xml 文件(或者 ~/.m2/settings.xml),在 <mirrors> 标签内添加如下配置:

xml
<mirrors>
    <!-- 阿里云 Maven 镜像 -->
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

私服配置

如果是公司内部的 Nexus 私服,通常需要在 <servers> 中配置认证信息,在 <profiles> 中配置仓库地址。

xml
<settings>
  <servers>
    <server>
      <id>my-repo</id>
      <username>admin</username>
      <password>password</password>
    </server>
  </servers>

  <profiles>
    <profile>
      <id>dev</id>
      <repositories>
        <repository>
          <id>my-repo</id>
          <url>http://nexus.example.com/repository/maven-public/</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
  
  <activeProfiles>
    <activeProfile>dev</activeProfile>
  </activeProfiles>
</settings>

2. 常用命令

在使用 Maven 时,我们通常会在项目根目录下执行 mvn 命令。

生命周期命令

命令描述
mvn clean清理:删除 target 目录,清理构建产物。
mvn compile编译:编译 src/main/java 下的源代码。
mvn test测试:运行 src/test/java 下的单元测试。
mvn package打包:将代码打包成 JAR 或 WAR 包,存放在 target 目录下。
mvn install安装:将打好的包安装到本地仓库,供本地其他项目引用。
mvn deploy部署:将打好的包推送到远程私服仓库

组合命令

通常我们会组合使用命令,例如:

bash
# 清理并打包,跳过单元测试
mvn clean package -DskipTests

# 清理并安装到本地仓库
mvn clean install

依赖管理命令

命令描述
mvn dependency:tree查看项目依赖树,排查依赖冲突的神器。
mvn dependency:analyze分析依赖使用情况(声明了未使用的,使用了未声明的)。
mvn dependency:sources下载依赖库的源码包。

其他常用参数

  • -U: 强制更新 Snapshots 类型的插件或依赖(mvn clean install -U)。
  • -pl: 指定模块构建(Project List),用于多模块项目(mvn clean install -pl module-a -am)。
  • -am: 同时构建所列模块的依赖模块(Also Make)。
  • -T: 开启多线程构建(Threads),加快构建速度。
    • mvn clean install -T 4: 使用 4 个线程。
    • mvn clean install -T 1C: 每个 CPU 核心使用 1 个线程。
  • -Dmaven.test.skip=true: 彻底跳过测试(不编译测试代码,也不运行)。
  • -DskipTests: 跳过测试运行(但会编译测试代码)。