Maven

Maven

1 maven是什么
Maven是Apache下的一个开源项目,它是一个项目管理(构建)工具,它用于对java项目进行项目构建、依赖管理及项目信息管理。当前使用Maven的项目在持续增长。
Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
1、项目对象模型(Project Object Model,简称为POM)
每个工程通过pom.xml文件统一定义项目所依赖的jar 包,定义项目构建过程,定义插件。。。

2、一个项目生命周期(Project Lifecycle)
maven将项目构建过程规范成一个生命周期,清理、初始化、编译、测试、报告 、打包、部署、站点生成等。

通过一个maven的命令完成各各生命周期。
比如:测试
执行mvn test ,自动执行工程中每个junit单元用例
打包命令:
如果是一个java工程,执行mvn package打成一个jar

3、一个依赖管理系统(Dependency Management System)
通过定义项目所依赖组件的坐标由maven进行依赖管理。
依赖3.0.1,通过在pom.xml中定义依赖即可将servlet的jar包自动加入工程:
pom.xml中定义依赖如下:

javax.servlet
javax.servlet-api
3.0.1
provided

4、标准集合(maven的基础)
maven定义了很多标准规范,比如:将工程的目录结构规范化了,规范化依赖管理、规范项目生命周期。。。

5、插件(plugin)目标(goal)
maven进行项目构建等过程,通过插件来完成。。
比如:将工程部署到tomcat,通过tomcat和maven的插件来完成

2 使用maven的原因

n 开发人员将功能开发完成,编译、打包、运行正常,而后提交svn,测试人员从svn获取代码后编译、打包、运行报错。
原因:整个工程构建过程没有统一化,开发人员构建环境和测试人员不一致,开发人员使用eclipse编译运行,测试人员使用一些工具软件(比如:Ant通过脚本进行编译、打包)。
解决:使用maven解决,maven是一个专业项目构建工具,将项目构建的过程进行规范统一,开发人员和测试人员都使用maven进行构建。
了解:maven比ant好处,ant通过手动编写脚本,maven通过约定(约定优于配置/规范)

n 一个项目工程中时间长了开发人员也搞不清楚项目中的某些jar的作用,用在哪些模块,不得不每过一段时间每个jar包梳理一遍。
梳理的目的:减少工程的大小,避免jar版本的冲突。
原因:通过从第三方官方网站下载jar,加入工程的jar都是工程所依赖的jar包,管理工程的依赖的jar的过程不规范。
解决:maven解决,maven定义一套规范依赖管理,通过定义jar包的坐标(一个坐标对应一下jar包)通过maven自动将jar从互联网下载到本地,加入工程。

n 项目使用的第三方框架要升级,从第三方框架官方网站下载jar包,加入工程,运行后报错,原来是第三方框架依赖的jar版本冲突了。
原因:加入工程的jar都是工程所依赖的jar包,管理工程的依赖的jar的过程不规范。
解决:maven通过依赖管理进行解决,maven在依赖管理时确定使用哪个版本(定义好坐标就行了)

n 项目的模块很多,每次启动项目需要从svn获取全部模块的项目代码编译运行,由于工程大项目启动慢,工作效率低下。
原因:并没有对项目的模块进行真正的单独开发。
解决:maven解决,可以将各各模块定义成单独的工程,将各各模块java源代码编译成一个jar包,发布maven的仓库中,各各去使用jar包通过坐标自动将jar下载到本地。
其中一个模块开发人员,只会维护模块的代码,通过maven的依赖管理将jar下载到工程中,jar包中代码不用编译了,省时间了。
要运行整个工程,创建一个父工程,聚合各各模块工程,父工程自动判断各各模块的依赖关系,最终打成一个war包,自动运行。

3 maven安装配置

3.1 下载

下载网址: http://maven.apache.org/download.cgi
本教程使用3.1.1 版本

maven依赖于jdk1.6以上。
bin:maven的运行脚本
mvn.bat 用于windows,
mvnDebug,用户于调试工程,可以打断点

boot:maven的类加载器
conf:配置文件
settings.xml 配置mven仓库、私服。。。。!!!
lib:maven运行依赖的jar

3.2 环境变量配置
配置:MAVEN_HOME,指定maven的安装目录

配置:path

验证:
查看 maven的版本

3.3 本地仓库
当maven去运行工程时,maven依赖插件,maven从互联网下载插件的jar包,如果在本地仓库有,不从互联网下载,如果本地仓库没有从互联网下载,将下载后jar放在本地仓库。

修改setting.xml:
配置本地仓库地址:

如果不配置本地仓库,本地仓库的地址在 c盘下用户/.m2
比如:C:\Users\Administrator.m2\repository

5>eclipse配置maven 如下图
第一步

第二步

第三步

(3)配置jdk

第一步

(4)配置tomcat
第一步

4 maven的入门程序

4.1.1 创建maven中java工程
4.1.1.1 创建工程

archetype:create:创建工程
指定工程的坐标,工程生成一个jar,通过坐标存储获取。
groupId:组织 或公司 名称,定义为公司的项目名称,以域名方式(包名方式)定义
artifactId:子项目名称或模块名称
version:版本,SNAPSHOT 开发中快照版本,没有正式发布。
archetypeArtifactId:maven的骨架,理解为工程结构,
maven-archetype-quickstart :此骨架用于创建java工程非web工程。

4.1.2 目录结构(掌握)

/pom.xml pom文件
/src/main/java ----存放java源代码,是主程序非测试程序代码,最终会打到工程的jar中。
/src/main/resources —存放主体程序的配置文件

/src/test/java -----存放java源代码,只是测试程序代码 --最终不会打工程的jar包中。
/src/test/resources—测试程序需要的配置文件

4.1.2.1 设置工程编译版本

本教程 使用jdk1.7,设置maven编译版本为1.7
在pom.xml中加入:

org.apache.maven.plugins maven-compiler-plugin 1.7 1.7 UTF-8

4.1.2.2 eclipse-maven命令的测试
Maven update:更新maven 依赖,修改pom文件过后,更新maven依赖
Run as 采用 mvn 命令运行 ,Debug as 采用 mvnDebug 命令运行
Maven build 使用之前操作过的命令
Maven build … 手动输入命令内容
Maven clean 执行清除命令
Maven install 执行安装命令
Maven test 执行测试命令

4.1.3 创建javaweb工程

选择webapp骨架:

确定坐标:

4.1.3.1 补齐目录结构
参考java工程

4.1.3.1 设置工程编译版本

本教程 使用jdk1.7,设置maven编译版本为1.7
在pom.xml中加入:

4.1.3.2 web.xml
使用web_app_2.5版本:

4.1.4 运行maven的web工程
web程序需要在tomcat容器上去运行。

maven通过tomcat插件(maven和tomcat整合插件)运行maven工程。

4.1.4.1 编写一个servlet进行测试

servlet的jar包 在tomcat下。

编写servlet类时需要引入jar,不是为了运行而为了编译需要。
运行时由tomcat提供上边两个jar包。
编译时将jar包加入工程。

加入servlet的jar包
方式1、通过eclispe (在maven工程下不推荐)
因为maven提供统一依赖管理。

方式2、通过pom.xml引入jar

在pom.xml加入如下:

jstl jstl 1.2 javax.servlet servlet-api 2.5 provided javax.servlet jsp-api 2.0 provided jar在工程中加入成功:

4.1.4.2 debug调试

在调试要求加载源代码:

5 maven详解–依赖管理
5.1 什么是依赖管理
maven提供了一套依赖管理机制,通过在pom.xml定义坐标,通过坐标从互联网的中央仓库下载依赖的构件(jar包),规范去管理依赖所有构件。

5.2 仓库管理
maven的依赖管理依赖于仓库,仓库中存储了jar包(所有项目可能使用的依赖的构件)

projectA、B:自己开发的项目工程。
n 本地仓库:
工程所依赖的jar包先从本地仓库找。
本地仓库在和工程同一个电脑,本地仓库的默认地址/用户/.m2/respsitory

n 中央仓库:
是maven默认的一个远程仓库,http://repo1.maven.org/maven2
此地址下存储了互联网上所有jar包,提供全世界的maven的jar包服务 , 是由maven团队来维护。

n 中央仓库镜像:
为了减轻中央仓库的压力 , 在各个大洲设立多个中央仓库的镜像 , 提供maven的jar包服务,相当于是站点。

n 私服:
在公司内部的局域网中搭建一台服务器,服务器上存储了远程仓库上的jar包。
本地仓库没有连接私服(如果配置了私服)获取jar,如果私服没有jar包,私服从中央仓库下载。

企业开发中,一般公司都会搭建私服

本地仓库-----》私服 -----》 中央仓库
(私服具有连接中央仓库代理权, 私服会自动连接中央仓库下载 )

5.3 pom.xml
每一个maven工程都有pom.xml文件,pom.xml中定义的内容如下:

第一部分: POM Relationships 关系 (必须设置)
Coordinates 坐标: 在仓库中唯一标识项目位置三个参数
项目名称
模块名称
版本号
Aggregation 聚合(多模块) : 将项目分解为多个不同模块
Inheritance 继承 : 项目之间继承,实现POM复用
Dependencies 依赖: 项目依赖另一个项目进行编译或者运行

第二部分: Project Information 项目信息
name :项目名称
desciption: 项目描述

第三部分: Build settings 构建配置(必须设置)
properties : 配置属性
build :构建项目需要插件配置 (重点,maven主要靠插件进行项目构建…)
packaging :打包方式 jar(将工程打成一个jar包)、war(将工程打成一个war包)、pom (工程为父工程时设置为pom,有子工程继承它)
第四部分: Build Environment 构建环境 (在依赖、构建、运行 生效配置 )
Distribution Management :版本锁定(解决依赖版本冲突的问题)
Profile : 灵活自定义配置,在特定情况激活

必须设置的内容:

5.4 查找坐标

Maven坐标主要组成
groupId:定义当前Maven项目名称
artifactId:定义项目模块
version:定义当前项目的当前版本
n 使用网站搜索
http://search.maven.org/
http://mvnrepository.com/

5.5 scop 依赖范围

compile:编译范围, 默认scope,在classpath中存在 在编译、测试、运行都有效
provided:已提供范围,比如容器提供Servlet API 编译时有效,运行无效,比如:jsp-api.jar servlet-api.jar 由tomcat提供,运行时无需要将工程中这两个jar打到war包中因为tocmat有了。
注意: 打包运行时,如果将jsp-api.jar servlet-api.jar打入工程中去运行,可能出现和tomcat中jar版本冲突!!!!
44、
runtime:运行时范围,编译不需要,接口与实现分离 只在运行时需要,比如:数据库的驱动包mysql-connector-java-5.1.7-bin.jar ,它是jdbc接口的实现,编译时使用java中jdbc接口,运行时候才会用到.

test:测试范围,单元测试环境需 要,只在测试时有效,junit.jar

system:系统范围,引入非仓库中的依赖,需要指定systemPath磁盘路径(不推荐使用)

只要运行时无效的依赖,最终不会打入war包或jar包中!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值