Maven系列--需要先了解些什么
2014-02-08 14:32
519 查看
作为一个程序员,很多时候都听到大家在强调学习新知识的三部曲:what、why、how,可是现实中往往很多时候大家都在亟不可待地反着走。
不懂三部曲是神马东西的,可参考这Google出来的首条:http://blog.csdn.net/program_think/article/details/3908713
我在学习maven的前面几天,就一直记着想出点成果,可是无奈maven的学习曲线确实陡了一点,在陌生的概念下产生的成果在内行眼里是如此不伦不类。我Boss就对我说了“你先别急着部署好这项目,先把maven了解清楚了再上”,于是我才把项目抛开,当一门知识在学习maven,拿出考前临时抱佛脚的力气深究了一周。
我是深深清楚当一个人连基本概念都不清楚时,是无法了解一个东西的运作的,所以才再此先讲一讲,学习maven的实战前,需要了解的一些东西。
中央仓库:
这是maven程序中内置的仓库,在没有存在额外仓库时,maven所有使用的依赖包都来源于此仓库
镜像仓库:
镜像仓库主要是中央仓库的一个副本,一来是为了提高依赖包的下载速度,同时也可能包含了一些不在中央仓库管辖下的依赖包。常说的maven私服也是镜像仓库的一种。个人开发者是缺少权限将自己开发的包发布到中央仓库中,为了让团队成员使用对应的依赖包,同时也为了提高依赖包的下载速度,公司内部一般建立一个maven私服,除了用来当做中央仓库的一个镜像之外,也用于管理公司内部开发的构件。在外网不宽裕的情况下,私服只需要保存一份中心仓库的依赖包,就可以在公司局域网中快速下载了。
本地仓库:
中央仓库和镜像仓库都属于远程仓库,本地仓库是远程仓库的一个缓冲和子集,当maven项目所需要的依赖包无法再本地仓库中查找到时,才会去远程仓库中进行下载。项目中引用的所有依赖包也都全部指向本地仓库中对应的文件。因此,只需要在电脑中保存一份依赖包,就可以同时为多个项目所引用了。
拿个图展示下这几个库之间的关系:
用后脑勺想想就知道了,如果maven需要定位一个依赖包或者插件来下载,是不是需要一个唯一标示符,而maven中就是使用坐标这一个概念来实现这个唯一标示符的。
maven坐标是构建maven项目所必须的,是被强制要求的,在这个基础上,其他Maven项目才能应用该项目生成的构件。
如上例子,就是一个简单的maven坐标实例,坐标主要有三部分组成:groupId、artifactId、version
groupId: 定义为当前Maven项目所隶属于的实际项目
artifactId: 定义为当前maven项目所隶属于实际项目的模块名
version: 当前项目模块的版本号
根据以上实例的坐标,maven将会自动从远程仓库中下载到相应的依赖包放置到本地仓库中,如下:
maven的插件也是使用maven坐标来定位
插件能做什么事情呢?插件可以管理代码编译的环境,比如jdk版本;插件可以将构建部署到特定环境上;插件可以将工程按照一定的结构打包出来;插件可以实现自动化测试等。
maven的插件很多,可参看官方的:http://maven.apache.org/plugins/,在官方插件无法满足的情况下,也可以按照项目需要开发自定义插件,一些常用的插件将在后续中介绍。
maven中,有三种类型的生命周期,其分别是:build lifecycle,clean lifecycle,site lifecycle。
在maven的定义中,生命周期将会划分为N个阶段,以最常用的build lifecycle为例,看官方介绍:
validate - validate the project is correct and all necessary information is available
compile - compile the source code of the project
test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
package - take the compiled code and package it in its distributable format, such as a JAR.
integration-test - process and deploy the package if necessary into an environment where integration tests can be run
verify - run any checks to verify the package is valid and meets quality criteria
install - install the package into the local repository, for use as a dependency in other projects locally
deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
以上的划分还是比较粗略的,若需要详细查看:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference
maven中将生命周期划分为阶段,然后在各个阶段中绑定插件,按照生命周期中阶段的顺序执行绑定到阶段上的插件,又看官方默认的插件绑定的生命周期:
也归功于此,我们才得以使用默认的maven配置顺利开箱即用。
好了,现在我们知道生命周期是个什么东西了,原来就是一个流程,用来根据阶段绑定插件来执行的一个流程。
不懂三部曲是神马东西的,可参考这Google出来的首条:http://blog.csdn.net/program_think/article/details/3908713
我在学习maven的前面几天,就一直记着想出点成果,可是无奈maven的学习曲线确实陡了一点,在陌生的概念下产生的成果在内行眼里是如此不伦不类。我Boss就对我说了“你先别急着部署好这项目,先把maven了解清楚了再上”,于是我才把项目抛开,当一门知识在学习maven,拿出考前临时抱佛脚的力气深究了一周。
我是深深清楚当一个人连基本概念都不清楚时,是无法了解一个东西的运作的,所以才再此先讲一讲,学习maven的实战前,需要了解的一些东西。
1. 仓库
maven中,仓库的作用主要用于下载依赖包,其中仓库有以下几种中央仓库:
这是maven程序中内置的仓库,在没有存在额外仓库时,maven所有使用的依赖包都来源于此仓库
镜像仓库:
镜像仓库主要是中央仓库的一个副本,一来是为了提高依赖包的下载速度,同时也可能包含了一些不在中央仓库管辖下的依赖包。常说的maven私服也是镜像仓库的一种。个人开发者是缺少权限将自己开发的包发布到中央仓库中,为了让团队成员使用对应的依赖包,同时也为了提高依赖包的下载速度,公司内部一般建立一个maven私服,除了用来当做中央仓库的一个镜像之外,也用于管理公司内部开发的构件。在外网不宽裕的情况下,私服只需要保存一份中心仓库的依赖包,就可以在公司局域网中快速下载了。
本地仓库:
中央仓库和镜像仓库都属于远程仓库,本地仓库是远程仓库的一个缓冲和子集,当maven项目所需要的依赖包无法再本地仓库中查找到时,才会去远程仓库中进行下载。项目中引用的所有依赖包也都全部指向本地仓库中对应的文件。因此,只需要在电脑中保存一份依赖包,就可以同时为多个项目所引用了。
拿个图展示下这几个库之间的关系:
2. maven坐标
2.1 为什么要定义maven坐标
搞个maven还需要坐标,这是定位系统么?不然这是个啥东西呢?用后脑勺想想就知道了,如果maven需要定位一个依赖包或者插件来下载,是不是需要一个唯一标示符,而maven中就是使用坐标这一个概念来实现这个唯一标示符的。
maven坐标是构建maven项目所必须的,是被强制要求的,在这个基础上,其他Maven项目才能应用该项目生成的构件。
2.2 maven坐标详解
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.2</version> </dependency>
如上例子,就是一个简单的maven坐标实例,坐标主要有三部分组成:groupId、artifactId、version
groupId: 定义为当前Maven项目所隶属于的实际项目
artifactId: 定义为当前maven项目所隶属于实际项目的模块名
version: 当前项目模块的版本号
根据以上实例的坐标,maven将会自动从远程仓库中下载到相应的依赖包放置到本地仓库中,如下:
2. 插件
maven本身是一个插件框架,也就是说maven的构建和管理能力来源于插件,maven的缺省配置中使用了许多插件,才使得使用简单的几行maven配置就能简单地构建起一个项目来。一个项目,除了要配置合适的依赖包之外,也需要配置合适的插件来构建和管理项目maven的插件也是使用maven坐标来定位
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> </plugin>
插件能做什么事情呢?插件可以管理代码编译的环境,比如jdk版本;插件可以将构建部署到特定环境上;插件可以将工程按照一定的结构打包出来;插件可以实现自动化测试等。
maven的插件很多,可参看官方的:http://maven.apache.org/plugins/,在官方插件无法满足的情况下,也可以按照项目需要开发自定义插件,一些常用的插件将在后续中介绍。
3. 生命周期
maven中,生命周期这一个概念经常让人很疑惑,其英文为lifecycle,到底什么是生命周期呢,先打个谜。maven中,有三种类型的生命周期,其分别是:build lifecycle,clean lifecycle,site lifecycle。
在maven的定义中,生命周期将会划分为N个阶段,以最常用的build lifecycle为例,看官方介绍:
validate - validate the project is correct and all necessary information is available
compile - compile the source code of the project
test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
package - take the compiled code and package it in its distributable format, such as a JAR.
integration-test - process and deploy the package if necessary into an environment where integration tests can be run
verify - run any checks to verify the package is valid and meets quality criteria
install - install the package into the local repository, for use as a dependency in other projects locally
deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
以上的划分还是比较粗略的,若需要详细查看:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference
maven中将生命周期划分为阶段,然后在各个阶段中绑定插件,按照生命周期中阶段的顺序执行绑定到阶段上的插件,又看官方默认的插件绑定的生命周期:
process-resources | resources:resources |
compile | compiler:compile |
process-test-resources | resources:testResources |
test-compile | compiler:testCompile |
test | surefire:test |
package | ejb:ejb or ejb3:ejb3 or jar:jar or par:par or rar:rar or war:war |
install | install:install |
deploy | deploy:deploy |
好了,现在我们知道生命周期是个什么东西了,原来就是一个流程,用来根据阶段绑定插件来执行的一个流程。
相关文章推荐
- Maven系列--需要先了解些什么
- 作为一个码农,你还需要了解什么?
- 使用 EJB 组件你需要了解些什么呢?
- 用Python爬网页需要了解什么背景知识
- 关于区块链,程序员需要了解什么
- ˚F安全下载 - 到底什么人需要了解有关到F安全下载
- 关于区块链,程序员需要了解什么
- 关于区块链,程序员需要了解什么
- 搜索引擎优化在2017年需要了解百度什么
- 欲将IT基础设施迁移到云端,中小企业需要了解什么?
- 前端的问题:javascription中的location对象是什么?需要详细了解
- 如何了解用户和需要了解什么
- 每个工程师需要了解什么是5G?
- Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)
- 产品如何进行标准ZigBee测试认证,需要了解哪些,需要走什么流程
- 【Maven学习笔记系列之仓库】走进Maven仓库和镜像,了解基本的使用方法
- 【虫师--系列01】在做性能测试之前需要知道什么
- Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发者需要了解什么?)
- Maven中groupID和ArtifactID什么意思?需要引入的jar包怎么找?