Maven基础知识(个人总结)
声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
2. 由于是个人总结, 所以用最精简的话语来写文章
3. 若有错误不当之处, 请指出
Maven 是一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理
依赖, 就是jar包的意思
Make→Ant→Maven→Gradle→其他……
安装好后
设置Path变量
设置镜像网站
修改JDK版本
修改本地仓库
构建环节(构建不等于搭建)
①清理:删除以前的编译结果,为重新编译做好准备。
②编译:将 Java 源程序编译为字节码文件。
③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告:在每一次测试后以标准的格式记录和展示测试结果。
⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war 包。 mvn source:jar是单独打包源码(类路径下),不含其他所用jar包
⑥安装:在 Maven 环境下特指将打包的结果 jar 包或 war 包安装到本地仓库中。
⑦部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。
jar 包冲突时:
①路径最短者优先
②路径相同时先声明者优先
即最短路径优先, 先声明者优先
<propertie>中属性可以重写父亲中的内容
生命周期
11.1 什么是 Maven 的生命周期
Maven 生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建
命令了。
Maven 有三套相互独立的生命周期,分别是:
①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
②Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
③Site Lifecycle 生成项目报告,站点,发布站点。
再次强调一下它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。
当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。
每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。
比如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。
11.2 clean 生命周期
Clean 生命周期一共包含了三个阶段:
①pre-clean 执行一些需要在 clean 之前完成的工作
②clean 移除所有上一次构建生成的文件
③post-clean 执行一些需要在 clean 之后立刻完成的工作
11.3 Site 生命周期
①pre-site 执行一些需要在生成站点文档之前完成的工作
②site 生成项目的站点文档
③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
④site-deploy 将生成的站点文档部署到特定的服务器上
这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强
大的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。
11.4 Default 生命周期
Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,
只解释一些比较重要和常用的阶段:
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。
11.5 生命周期与自动化构建
运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行 mvn install 的时候,代码会
被编译,测试,打包。这就是 Maven 为什么能够自动执行构建过程的各个环节的原因。此外,Maven
的插件机制是完全依赖 Maven 的生命周期的,因此理解生命周期至关重要
插件与目标
●Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
●每个插件都能实现多个功能,每个功能就是一个插件目标。
●Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
dependencyManagement(只是做个声明并不是直接导入jar包到该工程以及子模块, 在子模块里实际用到jar包时, 才真正进行导入; 常用来父工程里做依赖的版本管理)
import(对单继承的扩展, 相当于多继承懒模式导入一些jar包)
继承
是为了让父pom的 dependencyManagement能替他管理jar包版本,
以及继承父pom的 dependency中的jar包
聚合
是为了一键操作,让父亲(未必一定是父亲),不是父子也可以发生聚合,缕清孩子们之间的打包顺序, 为了快速的构建项目(构建不是搭建)
scope,默认为compile,也是活的最久的
坑处:
- system不用管, 它只从本地仓库找jar包,不会从maven中央仓库找jar包
- test, provided都会阻断依赖的传递
- 所以想进行传递的依赖都会被打包进去, 建议想只在idea里用&&又想依赖传递
- parent工程里需要去掉spring-boot的maven打包插件,因为里插件会继承, 不然子模块里的非服务工程会报找不到main.class
- SpringBoot打包, 祖先工程为spring-boot-starter-parent,且使用专用的maven打包插件
- maven的某个jar包不想依赖传递,千万别用scope provide的方式,因为这样会在运行期类不起作用,报ClassNotFoundException,可以使用true的方式阻止依赖传递
- 打包是在运行后面的
打包时跳过单元测试:
mvn package -DskipTests,不执行测试用例,但编译测试用例类到target/test-classes下。
mvn package -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。
maven安装jar包到本地
mvn install:install-file -Dfile=E:\\phoenix-core-5.0.0-HBase-2.0.jar -DgroupId=org.apache.phoenix -DartifactId=phoenix-core -Dversion=5.0.0-HBase-2.0 -Dpackaging=jar
打包用的shade插件
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><!-- 修改Main类名 --><mainClass>com.hellosrc.count.BiliBiliTimeCountMain</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>
Maven基础知识(个人总结)相关推荐
- Maven (1)---maven 基础知识
Maven 学习 Maven 翻译为"专家"."内行",是 Apache 下的一个纯 Java 开发的开源项目.基于项目对象模型(缩写:POM)概念,Maven ...
- Maven基础知识--Maven资源库详述
什么是Maven资源库? 在 Maven 术语里存储库是一个目录,即目录中保存所有项目的 jar 库,插件或任何其他项目特定文件,并可以容易由 Maven 使用. Maven库中有三种类型 local ...
- Maven基础与私服搭建
Blog诞生记 Android studio构建项目有时候build.gradld构建缓慢,严重影响了开发心情,这仅是次要因素,最重要的是leader为了考虑团队发展,建议搭建Maven私服,把项目模 ...
- java培训基础知识都学哪些
很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...
- java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识
原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...
- crawler4j_迷你搜索引擎–使用Neo4j,Crawler4j,Graphstream和Encog的基础知识
crawler4j 继续执行正在实现搜索引擎的Programming Collection Intelligence (PCI)的第4章. 我可能比做一次运动所咬的东西要多. 我认为,与其使用本书中所 ...
- 迷你搜索引擎–使用Neo4j,Crawler4j,Graphstream和Encog的基础知识
继续执行正在实现搜索引擎的Programming Collection Intelligence (PCI)的第4章. 我可能比做一次运动所咬的东西要多. 我认为, 与其一直使用本书中使用的普通关系数 ...
- mvc试图 下拉框不重复_面试前不巩固一下基础知识、刷刷题吗?
其实面试就像一场相亲,在你心动人的面前,肯定要展示自己最好的一面,无论是穿着还是言行举止.作为一个软件开发工程师,看过很多公司的面试题,也参与过很多公司的面试,也给不少人新人面过时不试,虽说我现在并没 ...
- 大数据?这些你了解吗?------之基础知识篇
下面介绍的这些是在Linux环境下学习大数据所必须要掌握的基础知识: 1.导入虚拟机 =>解压=>英文目录下=>导入VMware中[已移动]=>超级管理员用户root/123 ...
最新文章
- 深度学习Dropout技术分析
- echart(2),模拟数据导入篇
- Kafka事务特性详解
- PHP的isset()和empty()比较
- tomcat自动运行磁盘任意位置上的项目、使用Maven对tomcat进行自动部署
- php如何获取上传文件的后缀?
- 如何让eclipse恢复默认布局
- gitolite 踩坑记
- 獲取mysql字段的注释或描述
- {ACL2020}In Layman’s Terms: Semi-Open Relation Extraction from Scientific Texts(关系抽取,半开放关系抽取)
- REGEXP使用经验
- Illustrator 教程,如何在 Illustrator 中使用曲率工具绘制?
- Python递归的几个经典案例
- 【软件项目管理】期末复习
- 阿里云弹性云桌面解决方案、高性能GPU型云桌面用于设计、建模、影视制作
- HDFS中Locality 为什么介于0~1之间?与HBase之间有什么关系?
- 初识C语言之条件结构篇——带你认知编程世界的逻辑之美!
- AUTOSAR入门介绍
- html5猜颜色游戏,好看漂亮的html5网页特效学习笔记(3)_猜猜下一个颜色是什么?...
- Subset sum problem
热门文章
- NLP ---分词详解(常见的五种分词技术二)
- 旧计算机无法识别usb3.,无法识别usb设备怎么办?实测成功解决
- 2019/10/17 05-文件对象的读写方法
- 【教材】20022/11/28[指针] 指针数组
- JIRA扩展定制入门知识分享,附Github代码库
- 信息系统项目管理 - 范围管理(划重点)
- iOS立方体翻转3D特效
- 债券价格和到期收益率的关系_[债券知识]什么是到期收益率?到期收益率与债券价格的关系 - 南方财富网...
- ChatGLM2-6B、ChatGLM-6B 模型介绍及训练自己数据集实战
- [转]FBWCBBWC