Maven是跨平台的项目管理工具。
主要服务于Java平台的项目构建,依赖管理和项目信息管理。
理想的项目构建:高度自动化,跨平台,可重用的组件,标准化的。
优点如下:
- 简化了项目依赖管理:
- 易于上手
便于与持续集成工具(jenkins)整合 - 便于项目升级,无论是项目本身升级还是项目使用的依赖升级。
- 有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,而不用自己去编译。
- maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等
缺点如下:
- maven是一个庞大的构建系统,学习难度大
- maven采用约定优于配置的策略(convention over configuration),虽然上手容易,但是一旦出了问题,难于调试。
- 当依赖很多时,m2eclipse 老是搞得Eclipse很卡。
- 中国的网络环境差,很多repository无法访问,比如google code, jboss 仓库无法访问等。
Maven安装目录分析:
- bin:含有mvn的运行脚本
- boot:含有类加载框架
- conf:含有setting.xml配置文件
- lib:maven运行时需要的Java类库。
- License.txt Notice.txt,Readme.txt :针对maven版本,第三方软件进行简要介绍
Maven 约定:
src/main/java –
src/main/resources
src/test/java
maven坐标:
- groupId:定义当前的Maven项目的隶属项目
- artifactId:定义实际项目中的一个模块
- version:定义当前的版本
- packaging:定义该项目的打包方式
网页要打成war包
依赖的范围:
- compile:默认依赖范围,对编译,测试,运行的classPath都有效—。log4j
- test:测试依赖范围,只对测试依赖范围classpath有效。—junit
- provide:已提供依赖范围。对编译,测试的classpath都有效,但是对运行的无效。—servlet-api
- runtime:运行时提供。—JDBC Driver Implementation
仓库的分类:
- 本地仓库:本地的一个文件夹,用来存放所有的jar包,由自己维护,默认在~/.m2/repository,每个用户只有一个本地仓库。
- 远程仓库
中央仓库 :maven默认的中央仓库,由maven团队维护。
私服 :一种特殊的远程仓库,它是架设在局域网内部的仓库,一般是公司使用,由公司维护。
镜像:用来替代中央仓库的,速度比中央仓库快。
Maven的三大生命周期:
-
clean:进行项目构建时进行的清理工作。
-
default:构建的核心部分,编译,测试,打包,部署等。
-
site:生成项目报告,站点,发布站点。
清理–》编译–》测试–》报告–》打包–》部署
生命周期之间是相互独立的
指令:
- mvn compile:编译项目的源代码
- mvn test:使用适合的框架进行测试
- mvn package:打包成可发布的格式。
- mvn install:将包安装至本地仓库,以让其他项目依赖。
- mvn deploy:把包部署到远程仓库。
Maven的核心仅仅是定义了抽象的生命周期,具体的任务都是由插件完成的
每个插件都能完成多个功能,每个功能就是一个插件目标。
Maven的生命周期与目标相互绑定。
依赖的传递性:
- 路径最近者优先
- 路径相同,第一声明者优先。
继承
既然有重复的代码,而且是共性的,所以是可以把共性的代码抽象出一个·类,作为父类
聚合
如果想一次性构建多个模块,那么我们就需要对多个模块进行聚合。
Maven私服
什么是私服,为什么要使用私服:
私服是仓库的一种。有些公司不给内部人员上外网,那么就无法访问外网的远程maven仓库,那么就需要在局域网中找一台可以访问外网的机器,通过搭建私服,大家可以通过私服来连接到外部的中央仓库。
Nexus内置仓库说明:
- Maven Central:该仓库代理Maven中央仓库,其策略是Release。因此只会下载和缓存中央仓库发布的构件。
- Releases:这是一种策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件
- snapshots:策略为SnapShot的宿主类型仓库,用来部署组织内部的快照版本构件。
- 3rd party:策略为release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布的版本构建。
- Public Repositories:该仓库将所有策略为Release的仓库聚合并通过一致的地址提供服务。
创建宿主目录和代理仓库
- Hosted:本地仓库,通常我们会部署自己的构件到这一类型的仓库。包括:3rd仓库,Release 仓库,SnapShots仓库。
- Proxy:代理仓库,它们被用来代理远程的公共仓库。如maven中央仓库。
- Group:仓库组,用来合并多个hosted/proxy仓库,通常我们配置maven依赖仓库组。