Maven学习归纳(三)——依赖添加依赖排除与项目整合
一、Maven的坐标
1. 坐标的定义
数学意义上的坐标可以是平面上的(x,y)也可以是空间上的(x,y,z),都可以确定一个质点的位置和方向。
Maven中有很多构件,为了能够自动化解析任何一个构件,需要将它们做成唯一标识,即依赖管理的基础——坐标,通过坐标确定jar的位置
2. 为什么需要坐标
在没有坐标之前,当我们需要一些jar包的时候,总需要到各个网站上下载。这样一来,就浪费了很多时间,提高了程序开发成本。
另一方面,下载没有统一规范,导致版本不统一等,又严重提高了运维成本。
拥有了统一规范,就可以把查找工作交给机器。
3. 定义的规则
因为实现了统一管理,Maven定义了一组规则,让机器基于预定的规则去自动实现下载jar包。
只要提供了正确的坐标,Maven就能找到对应的jar包
Maven坐标的元素包括:
groupId:组织的标识
artifactId:项目的名称
version:项目的当前版本
packageing:项目的的打包发格式,分为jar pom war 三种
classifier:构建输出附件
二、Maven的生命周期
Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤
1. 三个生命周期
clean: Clean Lifecycle在进行真正的构建之前进行一些清理工作。
default: Default Lifecycle构建核心部分,如编译,测试,打包,部署等等。
site: Site Lifecycle生成项目报告,站点,发布站点。
2. 三个周期的关系
每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就调用这些生命周期阶段
较之于生命周期阶段的前后依赖关系,三套生命周期本身是相互独立的,用户可以仅仅调用clean生命周期的某个阶段,或者仅仅调用default生命周期的某个阶段,而不会对其他生命周期产生任何影响。
3. clean周期解析
pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行
也就是说,"mvn clean"等同于 mvn pre-clean clean ,
如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。
这是Maven很重要的一个规则,可以大大简化命令行的输入。
4. default周期解释
validate 验证项目是否正确和所有需要的相关资源是否可用,这包含对pom.xml文件树的验证
default 生命周期定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,它包含的阶段如下:
initialize 初始化构建
generate-sources 生成源码
process-sources 处理源代码
generate-resources 生成资源
process-resources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
compile 编译项目的主源代码
process-classes
generate-test-sources
process-test-sources 处理项目测试资源文件
generate-test-resources
process-test-resources 处理测试的资源文件
test-compile 编译项目的测试代码
process-test-classes
test 使用单元测试框架运行测试,测试代码不会被打包或部署
prepare-package 做好打包的准备
package 接受编译好的代码,打包成可发布的格式
pre-integration-test 前集成测试
integration-test 集成测试
postintegration-test 后集成测试
verify 检验
install 将包安装到Maven本地仓库,供本地其他Maven项目使用
deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
5. site周期解释
site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
pre-site 执行一些在生成项目站点之前需要完成的工作
site 生成项目站点文档
post-site 执行一些在生成项目站点之后需要完成的工作
site-deploy 将生成的项目站点发布到服务器上
运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。
三、Maven的依赖添加
例如:我想要完成文件上传到功能,就需要用到Fileupload的包,需要如何做呢?
在maven的官网上搜索要下载的包,http://mvnrepository.com/

点击进去之后,再复制下面这个框的内容

复制黏贴到pom.xml上面

结果如下:成功把jar包进去

仔细观察,还发现此时还多了commons-io-2.2.jar???为什么???这就涉及到了“依赖”
当A jar包需要用到B jar包中的类时,我们就说A对B有依赖。
如本例:commons-fileupload-1.3.3jar依赖于commons-io-2.2.jar。
当前工程会到本地仓库中根据坐标查找它所依赖的jar包。
配置的基本形式时使用,dependency标签指定目标jar包的坐标。
四、Maven的依赖排除
有时候为了确保程序正确,可以将有可能重复的间接依赖排除
例如,我不想要刚刚添加的commons-io-2.2.jar了

复制并黏贴到pom.xml上,注意要跟原来引出依赖的原包处于同一个<dependency></dependency>范围

看到项目结构上已经显示没有commons-io-2.2.jar了

五、Maven的项目整合
如何把两个maven项目整合在一个呢?
因为两个项目不能相互沟通,必然需要,将一个放入仓库中的

如上,我想将项目 HelloWorld2 依赖项目 HelloWorld ,就需要将被依赖的HelloWorld2放入仓库install下
如下所示:

然后对HelloWrold的项目进行install下,把它放入仓库

修改完pom.xml都要update一下,加入成功

测试下添加进来的项目是否可用
写好后再test下代码,执行成功

就先到此为止吧~ o(* ̄▽ ̄*)o
Maven学习归纳(三)——依赖添加依赖排除与项目整合的更多相关文章
- (转)Maven学习总结(三)——使用Maven构建项目
孤傲苍狼 只为成功找方法,不为失败找借口! Maven学习总结(三)——使用Maven构建项目 maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项目的 ...
- maven学习笔记三(依赖特性,作用域)
上一章中 我们看到了添加了个junit的依赖包.那么maven中想添加依赖的jar包我们只需要配置相应的dependency就行.例如: <dependency> <groupId ...
- Maven学习归纳(四)——传递依赖和依赖的规则
一.传递依赖 官方文档解释的传送门:http://ifeve.com/maven-dependency-mechanism/ 当存在传递依赖的情况时,主工程对间接依赖的jar可以访问吗? 例如:A.j ...
- 【Selenium-WebDriver实战篇】Eclipse上的maven使用JsonObject时,添加依赖后无法自动下载相应的jar包
==================================================================================================== ...
- Maven学习笔记(三) :Maven使用入门
编写POM: Maven项目的核心是pom.xml.POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描写叙述项目怎样构建,声明项目依赖,等等. ...
- Maven学习(三)
maven相关概念 maven坐标 Maven世界拥有大量构建,当我们需要引用依赖包是,需要用一个用来唯一标识去确定唯一的一个构建.如果拥有了统一规范,就可以把查找工作交给机器. 类似于空间找点的坐标 ...
- Maven学习(三)maven原理概念详述
maven相关概念 maven坐标 Maven世界拥有大量构建,当我们需要引用依赖包是,需要用一个用来唯一标识去确定唯一的一个构建.如果拥有了统一规范,就可以把查找工作交给机器. 类似于空间找点的坐标 ...
- Maven学习归纳(一)——简单的环境配置入门
一.Maven的基本概念 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的编译,测试,构建,报告和文档的软件项目管理工具和解决依赖关系的工具. 1.1 项目的构建 项目的构建 ...
- Maven——向Maven本地仓库中手动添加依赖包(ps:ojdbc.jar)
maven中央仓库中并非包含所有现有的依赖包和插件,部分依赖包和插件需要手动地进行添加(如ojdbc.jar) 一.添加JDK系统环境变量(maven是基于Java的,可参考:https://www. ...
随机推荐
- 定时器任务django-crontab的使用【静态化高频率页面,增加用户体验】【系统的定时器,独立于项目执行】【刘新宇】
页面静态化 思考: 网页的首页访问频繁,而且查询数据量大,其中还有大量的循环处理. 问题: 用户访问首页会耗费服务器大量的资源,并且响应数据的效率会大大降低. 解决: 页面静态化 1. 页面静态化介绍 ...
- Linux常用命令之ftp
FTP是Internet用户使用最频繁的文件上传.下载的命令之一.linux ftp用命令的方式来控制在本机和远程ftp服务器之间传送文件.ftp中的命令包括上传文件(单个.多个),下载文件(单个.多 ...
- C#_会员管理系统
https://www.cnblogs.com/start-from-scratch/p/5420588.html
- GOF23-单列模式
1.什么是单例模式 一个类只有一个实列,并且提供一个对外访问该实例的全局访问点. 常见应用场景:数据库连接池,项目中读取配置文件的类,servlet也是单列,Spring中的Bean默认也是单列 2. ...
- 如何处理scrum中未完成的用户故事?
你听过柏林新建机场的故事吗?机场原定2006年开工,2007年启用,但由于机场建设过程中到处出现施工和安全问题,补东墙漏西墙,导致工期一拖再拖,预算一涨再涨,以至于2019年了还没开张,预计开业时间已 ...
- HelloDjango 第 09 篇:让博客支持 Markdown 语法和代码高亮
作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法来书 ...
- 从 Python 之父的对话聊起,关于知识产权、知识共享与文章翻译
一.缘起 前不久,我在翻译 Guido van Rossum(Python之父)的文章时,给他留言,申请非商业用途的翻译授权. 过程中起了点小误会,略去不表,最终的结果是:他的文章以CC BY-NC- ...
- WPF DataGrid点击列头选择全列并具有背景色
完成这个操作,主要是XAML的代码. 主要思路是通过绑定多路数据,在多路转换器中返回布尔值,在通过数据触发器来设置被选择的全列的背景色. XAML页面主要代码 首先定义DataGridCell < ...
- git 常规业务场景 使用
一般每个开发者都会有个自己的分支,有个test分支,合并代码用,两条分支相互备份,就算merge的时候被覆盖,也不用担心 建立自己的分支 // 创建本地分支, git checkout -b dev_ ...
- 90002CAD相关操作
第一章 初识CAD 1.1 CAD能干什么 (1)绘制机械图/建筑图/装修图等二维复杂工程图的不二之选.二维设计软件的王者. (2)CAD可以绘制平面图.轴测图(二维线框表示三维图形).立体图(三 ...