当前位置: 首页 > news >正文

Maven的使用

Maven 是一个项目管理工具,它基于项目对象模型(POM,Project Object Model)的概念,通过一小段描述信息(pom.xml)来管理项目的构建、报告和文档。Maven 提供了一个标准化的方式来构建项目,并遵循一个共同的构建生命周期。使用 Maven 可以简化项目的构建过程,提高开发效率,并且有助于在团队中共享和重用代码。

Maven的简介

Maven 的主要特性包括:

  1. 依赖管理:Maven 可以自动处理项目的依赖关系,包括查找、下载和更新项目所需的库和框架。这大大简化了项目的构建和配置过程。

  2. 构建自动化:Maven 提供了一个标准化的构建生命周期,包括编译、测试、打包、部署等阶段。通过简单的命令(如 mvn clean install),Maven 可以自动完成这些阶段的任务。

  3. 可移植性:由于 Maven 项目遵循标准化的目录结构和项目对象模型(POM),因此项目可以很容易地在不同的环境中构建和运行,无需担心环境的差异。

  4. 项目信息管理:Maven 的项目对象模型(POM)包含了项目的所有配置信息,如依赖关系、插件配置、目标平台等。这使得项目的管理和维护变得更加容易。

  5. 多模块管理:Maven 支持多模块项目的管理,可以将一个大的项目拆分成多个模块,每个模块都可以有自己的构建生命周期和依赖关系。这有助于项目的模块化和重用。

Maven 的使用流程通常包括以下几个步骤:

  1. 安装 Maven:首先需要在开发环境中安装 Maven。Maven 的官方网站提供了安装指南和下载链接。

  2. 创建项目:可以使用 Maven 的 archetype 插件来快速生成项目的基本结构和 POM 文件。

  3. 编辑 POM 文件:根据项目需求,编辑 POM 文件来配置项目的依赖关系、插件、目标平台等信息。

  4. 构建项目:在命令行中使用 Maven 命令(如 mvn clean install)来构建项目。Maven 会自动处理项目的编译、测试、打包等任务。

  5. 运行和部署:构建完成后,可以使用 Maven 插件(如 Tomcat 插件)来运行或部署项目。

Maven 的核心文件:

  • pom.xml:项目的项目对象模型文件,包含了项目的配置信息。
  • settings.xml:Maven 的全局配置文件,通常位于 Maven 安装目录下的 conf 目录中,用于配置 Maven 的行为,如代理设置、仓库地址等。

Maven的安装和配置

Maven常见命令: 

  • 编译(compile)
    • 编译项目的主代码,即src/main/java目录下的Java文件。编译后的文件会放在target/classes目录下。
  • 清理(clean)
    • 清理项目,删除target目录及其下所有内容。这个命令用于删除之前构建生成的所有文件,确保构建环境是干净的。
  • 测试(test)
    • 运行项目中所有的单元测试。Maven会查找src/test/java目录下的测试代码,并运行它们。测试结果会在控制台输出,并可能生成详细的测试报告。
  • 打包(package)
    • 将编译后的代码打包成可分发的格式,如JAR、WAR或EAR等。具体的打包格式取决于pom.xml文件中的packaging元素。打包后的文件会放在target目录下。
  • 安装(install)
    • 将打包后的文件安装到本地仓库中,以便其他项目作为依赖使用。这个命令首先会执行mvn package,然后将生成的包安装到本地Maven仓库。

Maven的生命周期

Maven的生命周期是Maven构建工具的核心概念之一,它为项目构建提供了一个标准化和自动化的框架。Maven的生命周期是对所有的构建过程进行抽象和统一,包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。Maven的生命周期是抽象的,即生命周期本身不做任何实际的工作,实际任务由插件完成。Maven内部有三个标准生命周期,分别是clean、default(或称为build)和site。

Maven的三大生命周期

  1. clean生命周期
    • 目的:清理项目。
    • 包含的阶段
      • pre-clean:执行一些清理前需要完成的工作。
      • clean:清理上一次构建生成的文件,主要是删除target目录。
      • post-clean:执行一些清理后需要完成的工作(注意:在某些版本的Maven中,post-clean阶段可能不被直接支持或默认执行)。
  2. default(或build)生命周期
    • 目的:构建项目。
    • 包含的阶段(部分关键阶段):
      • validate:验证项目是否正确,所有需要的资源是否可用。
      • compile:编译项目的源代码。
      • test:使用合适的单元测试框架来测试已编译的源代码。
      • package:把已编译的代码打包成可发布的格式,如jar、war等。
      • integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
      • verify:运行所有检查,验证包是否有效且达到质量标准。
      • install:把包安装到Maven本地仓库,可以被其他工程作为依赖来使用。
      • deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
  3. site生命周期
    • 目的:建立和发布项目站点。
    • 包含的阶段
      • pre-site:生成项目站点之前需要完成的工作。
      • site:生成项目站点文档。
      • post-site:生成项目站点之后需要完成的工作。
      • site-deploy:将项目站点发布到服务器。

Maven生命周期的特点

  • 抽象性:Maven的生命周期是抽象的,它定义了构建过程的各个阶段,但实际的构建工作由插件来完成。
  • 有序性:生命周期中的阶段是有序的,后面的阶段依赖于前面的阶段。
  • 可配置性:通过配置pom.xml文件,开发者可以灵活地定制化构建过程,以满足项目的特定需求。
  • 自动化:Maven通过定义好的生命周期和插件,实现了构建过程的自动化,提高了开发效率。

IDEA中java的配置

依赖范围

  1. compile:这是默认的依赖范围。如果依赖项被设置为compile范围,那么它将被包含在项目的编译classpath中,以及项目的打包文件(如jar、war)中。这意味着该依赖项在编译、测试和运行阶段都是可用的。

  2. test:这个范围的依赖项仅用于测试阶段,它们不会被包含在项目的最终打包文件中。这些依赖项通常包括测试框架(如JUnit)和模拟库(如Mockito)。

  3. provided:这个范围的依赖项在编译和测试阶段都是可用的,但它们不会被包含在项目的最终打包文件中。这些依赖项通常由运行时环境(如Servlet容器或应用服务器)提供。例如,Servlet API和JSP API通常被设置为provided范围,因为Web服务器已经提供了这些API的实现。

  4. runtime:这个范围的依赖项在编译时不是必需的,但在运行时是必需的。它们会被包含在项目的最终打包文件中。这通常用于那些编译时不需要,但运行时需要的库。

  5. system:这个范围与provided类似,但它需要显式地指定依赖项的路径。这通常不推荐使用,因为它降低了项目的可移植性。

  6. import(在Maven的DependencyManagement中):这不是一个标准的依赖范围,但在Maven的<dependencyManagement>部分中,import用于导入另一个POM文件中的<dependencyManagement>部分。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 多线程面试常问
  • MarkDown演示
  • 【PostgreSQL教程】PostgreSQL 高级篇之触发器
  • 以简单的例子从头开始建spring boot web多模块项目(四)-多模块工具类
  • Android TableLayout中TextView文本不居中问题
  • 大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
  • FastAPI vs Flask: 专业对比与选择
  • 使用 setResponseStatus 函数设置响应状态码
  • Prometheus Operator部署管理
  • SQL每日一题-0823(难度提升题)
  • SpringCloud Gateway及 Springboot 服务 跨域配置
  • gcc: leaf function/non-leaf function;末节函数,叶子函数
  • conda虚拟环境中安装cuda和cudnn
  • Milvus向量数据库-磁盘索引简介
  • HTTP 414错误问题
  • (三)从jvm层面了解线程的启动和停止
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Apache Spark Streaming 使用实例
  • Flannel解读
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • LeetCode29.两数相除 JavaScript
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP的Ev教程三(Periodic watcher)
  • React+TypeScript入门
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • webpack入门学习手记(二)
  • 彻底搞懂浏览器Event-loop
  • 程序员该如何有效的找工作?
  • 和 || 运算
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端性能优化--懒加载和预加载
  • 前端知识点整理(待续)
  • 前嗅ForeSpider教程:创建模板
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 主流的CSS水平和垂直居中技术大全
  • FaaS 的简单实践
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​人工智能书单(数学基础篇)
  • #控制台大学课堂点名问题_课堂随机点名
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (六)Hibernate的二级缓存
  • (七)Java对象在Hibernate持久化层的状态
  • (十)c52学习之旅-定时器实验
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (原創) 物件導向與老子思想 (OO)
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例