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>

总结

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

相关文章

  • Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案

    Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案

    这篇文章主要介绍了Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • tio-boot整合hotswap-classloader实现热加载方法实例

    tio-boot整合hotswap-classloader实现热加载方法实例

    这篇文章主要为大家介绍了tio-boot整合hotswap-classloader实现热加载方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • spring启动错误Singleton bean creation not allowed while the singletons of this factory are indestruction

    spring启动错误Singleton bean creation not al

    本文主要介绍了spring启动错误Singleton bean creation not allowed while the singletons of this factory are indestruction,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • SpringBoot加载配置文件的实现方式总结

    SpringBoot加载配置文件的实现方式总结

    在实际的项目开发过程中,我们经常需要将某些变量从代码里面抽离出来,放在配置文件里面,以便更加统一、灵活的管理服务配置信息。所以本文将为大家总结一下SpringBoot加载配置文件的常用方式,需要的可以参考一下
    2022-03-03
  • springboot security使用jwt认证方式

    springboot security使用jwt认证方式

    这篇文章主要介绍了springboot security使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • mybatis教程之resultmap_动力节点Java学院整理

    mybatis教程之resultmap_动力节点Java学院整理

    这篇文章主要介绍了mybatis教程之resultmap,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java获取视频时长和封面截图

    Java获取视频时长和封面截图

    这篇文章主要为大家详细介绍了如何使用Java获取视频时长和封面截图功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • Java集合类中文介绍

    Java集合类中文介绍

    本文首先对Java集合类框架做了简单说明,之后对主要类和为API做了介绍:Collection、List、Set、AbstractCollection、AbstractList、AbstractSet、Iterator、ListIterator。
    2013-11-11
  • 快速解决 IDEA 报错: “java 找不到符号“(“cannot find symbol“)

    快速解决 IDEA 报错: “java 找不到符号“(“cannot find symbol“)

    文章详细讲解了在IntelliJIDEA中解决“找不到符号”错误的方法,包括检查导入语句、拼写错误、类路径设置、文件编译状态、JDK配置以及IDE配置问题,通过具体示例代码,展示了如何从错误代码到解决步骤,感兴趣的朋友一起看看吧
    2025-03-03
  • 我们来说说Java LockSupport 的 park 和 unpark

    我们来说说Java LockSupport 的 park 和 unpa

    LockSupport是JDK底层线程阻塞工具,通过park/unpark实现线程阻塞与唤醒,避免死锁,与Object的wait/notify相比,无需监视器,支持先unpark后park,且更精确控制线程状态,是AQS等同步器的核心基础,本文介绍Java LockSupport 的 park 和 unpark,感兴趣的朋友一起看看吧
    2025-07-07

最新评论