Maven

Maven

  1. 什么是 Maven ?
  • Maven 是Apache 基金下的个 Java 平台的项目自动化构建工具,基于项目对象模型(POM)
  1. Maven 可以作什么
  • 自动管理 jar 包之间的依赖关系
  • 根据坐标 获取第三方 jar 包
  • 项目多模块管理
  • 构建项目
  1. 构建项目的环节
  • 清理 (clean):删除以前的编译结果,为重新编译做好准备
  • 编译 (compile):将Java 源程序编译为字节码文件测试(test):针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性
  • 报告 :在每一次测试后以标准的格式记录和展示测试结果
  • 打包 (package):将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war 包。
  • 安装 (install):在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
  • 部署 (deploy):将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。
  1. Maven 常用命令
  • mvn -version/-v —— 显示版本信息
  • mvn clean —— 清空生成的文件
  • mvn compile —— 编译mvn test —— 编译并测试
  • mvn package —— 生成target目录,编译、测试代码,生成测试报告,生成jar/war文件
  • mvn site —— 生成项目相关信息的网站
  • mvn clean compile —— 表示先运行清理之后运行编译,会将代码编译到target文件夹中
  • mvn clean package —— 运行清理和打包
  • mvn clean install —— 运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用
  • mvn clean deploy —— 运行清理和发布
  1. Maven 依赖范围
  • compile 默认范围,编译 测试 运行 都有效,会打入包中
  • provided 编译测试 有效,运行期不需要提供,不会打入包中。比如 javax.servlet ,当项目部署时Web容器自带servlet,所以不需要在运行时生效
  • runtime :测试运行 有效,需要打入包中
  • test :测试 有效,Junit,不会打入包中
  • system :编译测试 都有效,由于关联本机,所以可移植性差
  1. 统一依赖管理 jar包 的版本
  • properties 统一声明版本号,dependices中引用声明的版本号
  • 多模块项目,父工程统一管理其他模块的公共依赖,子工程模块以与父工程是聚合 关系,在父工程的module
  1. 依赖冲突解决方法
  • Maven 自动处理依赖冲突:最短路径优先相同路径,先声明优先
  • 手动处理依赖冲突:使用exclusion 排除不需要的依赖
  1. Maven 生命周期 ,Clean、Default、Site
  • 三套生命周期相互独立每个生命周期对应自己的几个阶段
  • 特定某个生命周期,运行任何一个阶段,它前面所有阶段都会运行

Gradle 与 Maven

  1. Gradle特性
  • 比 Maven 粒度更小,Maven是POM模型,而Gradle每个Project对象还可以划分为Task
  • gradle 比 Maven 更灵活,依赖导入与管理简单,可读性强。
  • DSL语法,Groovy动态语言,闭包,钩子函数
  • 但是使用Gradle需要额外学习语法,有一定的学习曲线
  1. Gradle 生命周期介绍
  • Initialization(初始化阶段),通过settings.gradle 判断有哪些项目需要进行初始化,加载所有需要初始化的项目的build.gradle 文件并为每个项目创建project 对象
  • Configuration(配置阶段),扫描各项目下的build.gradle 脚本,对project 进行配置(执行哪些任务,运行哪些插件,执行哪些逻辑),并且构造Task 任务关系依赖图 以便在执行阶段按照依赖关系执行Task中的配置代码(如println方法)
  • Execution(执行阶段),通过配置阶段的 Task 图,按顺序执行需要执行的 任务中的动作代码,就是执行doFirstdoLast 等代码
  1. Gradle快的原因
  • 项目启动时,会开启一个client,然后启动一个daemon,通过client向daemon收发请求,项目关闭,client关闭,daemon保持启动,有类似项目再次部署时,会直接通过新的client访问已经启动的daemon,所以速度很快,默认daemon不使用3小时后关闭;不同项目兼容性考虑,也可使用--no-daemon 启动项目,就没有速度优势了
  • 支持Groovy的动态脚本语言。核心是Project与Task。项目启动时,会启动一个Client 和一个deamon ,每个project实例有变动时,client会直接给daemon
原文地址:https://www.cnblogs.com/luckyCoder/p/12743284.html