Maven快速入门和常用配置方式

 更新时间:2026年05月30日 10:40:32   作者:Yweir  
Apache Maven 是一个强大的 Java 项目管理工具,通过项目对象模型(POM)和生命周期管理构建、依赖和文档, 它支持依赖管理、构建继承和站点生成,简化构建过程并确保环境一致性, 关键指令如mvn clean、mvn compile和mvn package等帮助完成构建任务

介绍

Apache Maven 是一个 Java 项目管理工具,它基于项目对象模型(POM),通过一系列标准构建规则来管理项目的构建、依赖关系和文档。

Maven 的特点

依赖管理:

  • Maven 使用一个中央仓库(如 Maven Central Repository)来管理项目的依赖项。
  • 依赖项会被自动解析并下载到本地仓库,减少了手动配置和依赖冲突的问题。

生命周期和插件:

  • Maven 定义了一系列的构建生命周期,每个生命周期又包含了多个构建阶段。常见的生命周期包括 clean、default(build)、site 等。
  • 构建阶段通过插件来实现具体的构建逻辑,比如编译源代码、运行测试、打包、部署等。

项目对象模型 (POM):

  • Maven 使用 XML 文件(pom.xml)来描述项目的配置信息,称为项目对象模型(Project Object Model, POM)。
  • POM 包含了项目的基本信息(如名称、版本号、依赖关系等),以及构建过程中的配置信息。

路径约定优于配置:

  • Maven 强调路径约定(convention over configuration),简化了构建过程。例如,默认情况下 Maven 会知道在哪里查找源代码、测试代码、资源文件等。

构建继承:

  • Maven 支持多模块项目,并允许子项目继承父项目的配置,从而减少重复配置。

站点生成:

  • Maven 可以自动生成项目的文档站点,展示项目的文档、依赖图、报告等信息。

环境一致性:

  • Maven 有助于确保不同开发环境之间的一致性,因为构建脚本是声明式的而不是过程式的。

可移植性:

  • Maven 的构建脚本是平台无关的,可以在任何支持 Java 的平台上运行

Maven 的优势

  • 简化构建过程:Maven 提供了一套标准的构建流程,使得从编译、测试到打包、部署的过程更加简单和一致。
  • 依赖管理:自动化的依赖管理避免了手动管理依赖所带来的麻烦。
  • 可维护性和可扩展性:POM 和生命周期的设计使得项目的维护和扩展变得更加容易。
  • 团队协作:由于 Maven 的构建过程是标准化的,因此它非常适合团队协作,减少了因构建环境差异导致的问题

Maven 常用指令分类

构建命令

指令描述
mvn clean清除项目的工作目录,移除之前构建产生的文件。
mvn compile编译项目的源代码。
mvn test运行项目中的单元测试。
mvn package打包项目,通常会生成 JAR 或 WAR 文件。
mvn install将项目安装到本地仓库,方便其他项目作为依赖使用。
mvn deploy将项目发布到远程仓库,供其他开发者下载。

生命周期命令

Clean 生命周期

指令描述
mvn pre-clean执行在 clean 之前的任何工作。
mvn clean清除以前的构建结果。
mvn post-clean执行在 clean 之后的工作。

Default 生命周期

指令描述
mvn process-resources复制并处理资源文件,使其为编译做好准备。
mvn compile编译主源码。
mvn process-classes在编译之后处理类文件。
mvn generate-sources生成额外的源码,并将其添加到生成的源码目录中。
mvn process-test-resources复制并处理测试资源。
mvn test-compile编译测试源码。
mvn process-test-classes在测试编译之后处理类文件。
mvn test运行测试。这些不会被打包或部署。
mvn prepare-package在测试之后执行打包前的操作。
mvn package包装所有编译好的代码,使其适合分发。
mvn pre-integration-test在集成测试前执行操作。
mvn integration-test处理与集成测试相关的任务。
mvn verify运行任何检查以验证包是否可用于部署。
mvn install将包安装到本地存储库,以供其他项目作为依赖使用。
mvn deploy将最终的包复制到远程存储库,以便与其他开发人员共享。

Site 生命周期

指令描述
mvn site生成项目站点文档。
mvn pre-site在生成站点文档之前执行任何任务。
mvn post-site在生成站点文档之后执行任何任务。
mvn site-deploy将生成的站点文档部署到特定位置。

依赖命令

指令描述
mvn dependency:tree显示项目的依赖树。

插件命令

指令描述
mvn plugin:goal通常用于执行特定插件的目标。

其他命令

指令描述
mvn help:effective-pom显示当前项目实际使用的 POM。
mvn versions:display-dependency-updates显示可以更新的依赖版本。
mvn versions:display-plugin-updates显示可以更新的插件版本。
mvn versions:update-properties更新版本属性。
mvn dependency:sources获取依赖的源代码。
mvn dependency:analyze分析项目的依赖,确定哪些依赖未被使用。

设置utf8编码格式方法

全局配置

添加系统环境变量:

  • 变量名 MAVEN_OPTS
  • 变量值 -Xms256m -Xmx512m -Dfile.encoding=UTF-8

在项目pom.xml中配置

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

在项目的 pom.xml中 build 配置

  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <!-- 项目编码-->
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot启动不了也不报错的问题及解决

    springboot启动不了也不报错的问题及解决

    这篇文章主要介绍了springboot启动不了也不报错的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java中正则表达式的使用和详解(上)

    Java中正则表达式的使用和详解(上)

    这篇文章主要介绍了Java中正则表达式的使用和详解,包括匹配验证验证email是否正确,在字符串中查询字符或者字符串的代码实例,需要的朋友可以参考下
    2017-04-04
  • Java容器ArrayList原理解析

    Java容器ArrayList原理解析

    这篇文章主要介绍了Java容器ArrayList原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • JDK9到JDK21中值得掌握的29个实用特性分享

    JDK9到JDK21中值得掌握的29个实用特性分享

    Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的实用特性,需要的可以了解下
    2025-05-05
  • Spring Cache 最佳实践总结

    Spring Cache 最佳实践总结

    SpringCache是Spring框架提供的声明式缓存抽象层,通过少量注解即可为应用添加缓存能力,无需侵入业务代码,本文给大家介绍Spring Cache 最佳实践总结,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Java List按照某字段去重的使用示例

    Java List按照某字段去重的使用示例

    在Java开发中,我们经常会面临对List中对象属性去重的需求,本文主要介绍了Java List按照某字段去重的使用示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Spring Boot参数校验及分组校验的使用教程

    Spring Boot参数校验及分组校验的使用教程

    在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性,下面这篇文章主要给大家介绍了关于Spring Boot参数校验及分组校验使用的相关资料,需要的朋友可以参考下
    2021-08-08
  • Java实现为PDF批量添加图片水印实用指南

    Java实现为PDF批量添加图片水印实用指南

    在数字化办公日益普及的今天,PDF文档作为信息传输和共享的重要载体,其安全性和版权保护变得尤为关键,本文将介绍如何使用Spire.PDF for Java轻松地在Java应用程序中为PDF文档添加图片水印,有需要的可以参考下
    2025-11-11
  • Java集合中的Collection接口总结

    Java集合中的Collection接口总结

    这篇文章主要介绍了Java集合中的Collection接口总结,Collection 接口是 List和Set接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 集合,需要的朋友可以参考下
    2023-11-11
  • Java之dao模式详解及代码示例

    Java之dao模式详解及代码示例

    这篇文章主要介绍了Java之dao模式详解及代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论