Maven实战

来源:互联网 发布:linux 文件引用计数 编辑:程序博客网 时间:2024/06/07 20:12

1.什么是Maven
Maven 是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段中插件的逻辑。

2.安装和运行Maven
2.1 下载Maven
你可以从Apache Maven项目的web站点下载Maven:http://maven.apache.org/
download.html. Maven可运行在jdk1.4以上。Maven的版本需要和jdk版本对应:
Version Required Java Version
3.3.9 Java 7
3.2.5 Java 6
3.1.1 Java 5

2.2 安装Maven
把Maven解压目录后,你需要设置两个环境变量—— PATH 和M2_HOME(MAVEN_HOME) 。
2.3 验证Maven安装
当Maven安装完成后,你可以检查一下它是否真得装好了,通过在命令行运行 mvn -v。
如果Maven装好了,你应该能看到类似于下面的输出。
这里写图片描述
如果你看到了这样的输出,那么Maven已经成功安装了。如果你看不到,而且你的操作系统找不到 mvn 命令,那么确认一下 PATH 和 M2_HOME 环境变量是否已经正确设置了。

2.4 Maven的最佳实践
运行mvn命令实际上就是运行java命令,通常可以通过配置MAVEN_OPTS的值为
-Xms128m –Xmx512m,因为java默认的内存往往不能满足Maven的运行,比如项目比较大的时候,如果没有这个配置,可能会报java.lang.OutOfMemeoryError.

3.手动创建一个简单的Maven项目
Maven 的项目结构:
这里写图片描述

Maven的常见构建命令

这里写图片描述

4.自动创建一个简单的Maven项目
1.mvn archetype:generate 按照指示进行选择
2.mvn archetype:gennerate –DgroupId=组织名,公司网址的反写+项目名
-DartifactId=项目名-模块名 -Dversion=版本号 –Dpackage=代码所存在的包名

5. Maven的坐标和仓库
1.坐标(构件)
这里写图片描述
2.仓库(本地仓库和远程仓库)
Maven默认的本地仓库:${user.home}/.m2/repository,我们可以在setting.xml配置本地仓库。
这里写图片描述
如果本地仓库中找不到对应的jar,就会去远程仓库寻找。
全球中央仓库:https://repo.maven.apache.org/maven2
3.镜像仓库
比如A提供跟B一样的功能,则A就是镜像仓库。
可以在setting.xml中配置镜像仓库
这里写图片描述

6. myeclipse中创建Maven项目
Eclipse4.0以上的版本或者myeclipse自带Maven插件
1.Myeclipse中maven的配置:
Preferences–>Myeclipse–>Maven4MyEclipse–>Installations 配置maven的安装目录
Preferences–>Myeclipse–>Maven4MyEclipse–>User Settings 配置setting.xml
2.Myeclipse中创建maven project
右键new—》Maven Project
如果创建项目过程中遇到以下错误:
这里写图片描述
那是因为本地仓库里面没有对应的构件,需下载相应的jar,并把他安装到本地仓库。
安装命令如下:

这里写图片描述

创建成功后的maven项目结构如下:

这里写图片描述
7. Maven的生命周期和插件
完整的项目构建过程包括:
清理,编译,测试,打包,集成测试,验证,部署
Maven项目的生命周期:
Clean 清理项目
Pre-clean 执行清理前的工作
Clean 清理上一次构建生成的文件
Post-clean 执行清理后的工作
Default 构建项目(最核心)
Compile, test, package, install
Site 生成项目的站点
Pre-site 在生成站点前完成的工作
Site 生成项目的站点文档
Post-site 在生成项目站点后要完成的工作
Site-depoly 发布生成的站点部署到服务器

Maven的核心仅仅定义了抽象的生命周期,具体的任务是交由插件来实现的。
为了让用户几乎不使用任何配置就能构建maven项目,maven为核心的生命周期绑定了很多插件的目标。比如 clean生命周期的3个阶段(pre-clean,clean,post-clean)是由maven-clean-plugin:clean来完成的,site生命周期(pre-site,site,post-site)是由maven-site-plugin:site, site-deploy是由maven-site-plugin:deploy完成的,等等。这些都属于内置的插件,当然也运行自定义插件,如下图:
这里写图片描述
执行package命令后生成jar,如下图:

这里写图片描述
8. Pom.xml常用元素介绍

9. 依赖范围
这里写图片描述

Compile:默认的范围,编译测试运行都有效,compile参与依赖传递,就是说,项目A依赖于B(依赖scope是compile),项目C依赖于你的项目A,那么C也就依赖于B。
Provided: 在编译和测试时有效,不参与传递依赖
Runtime: 表示编译时无效,在测试和运行时有效
Test:只在测试时有效
System:在编译和测试时有效,但是与本机系统相关,可移植性差
Import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
10. 依赖传递
比如A–>B–>C,则A也依赖于C
11. 依赖排除
比如A–>B–>C,这样A就间接的依赖了C,如果A不想依赖C,可以将C排除

12. 依赖冲突
依赖冲突是一个项目同时依赖不同版本的相同构件。
依赖原则:
1.短路优先
A—》B—》C—》X(JAR)
A—》D—》X(JAR)
则A是依赖D中的X
2.先声明先优先:如果路径长度相同,则谁先声明,先解析谁
13. Maven的聚合和继承
聚合:
这里写图片描述
继承:
dependencies可以使得子模块继承父模块依赖的插件,同时dependencyManagement元素又能保证子模块使用的灵活性。在dependencyManagement元素下的声明不会引入实际的依赖,不过它能够约束dependencies下的依赖使用。在父POM中用定义好version, scope, 和exclusions后,可以被子POM中用定义的依赖所继承使用。这样,如果有多个子POM的话,可以确保用同一套version, scope, 和exclusions。
这里写图片描述
通过介绍会发现多模块的maven项目的聚合与继承其实是两个完全不通的概念,前者主要是为了方便实现快速构建项目,后者是为了消除重复的配置以及管理。但是聚合与继承关系中的父pom都要求packagin为pom。在实际项目中往往会发现一个pom既是聚合pom又是父pom,这么做主要是为了方便。
14. 使用Maven创建web项目

这里写图片描述

这里写图片描述
添加代码目录:

这里写图片描述

这里写图片描述

原创粉丝点击