Maven详细介绍
一、课程目标
Maven
构建Maven多模组功能
二、什么是maven
Maven是一个跨平台的专案管理工具,主要用于基于java平台的专案构建,依赖管理。

如图为专案构建的过程。
解决的专案的问题:
1、如果有好几个专案,这好几个专案中,需要用到很多相同的jar包,
能不能只建立一个仓库来解决这个问题?
2、测试方法能不能全部执行呢?
3、怎么样把一个模组的功能放入到仓库中
三、Maven的安装与配置
Maven的安装
Jdk的情况
Jdk必须1.6以上的版本
从官网下载maven
从http://maven.apache.org/官网上下载最新版本的maven
设定path路径
把下载下来的maven解压缩,然后有一个bin资料夹,这是一个bin的资料夹的目录
F:workcoursemavenmavenin
把该目录追加到环境变数的path中。
利用命令列检查是否成功

有这个图,说明maven安装成功了。
建库
先开启路径
C:UsersThink.m2
把settings.xml档案复制到上述的路径中
F:workcoursemavenapache-maven-3.0.5-binapache-maven-3.0.5conf
有一个settings.xml档案,复制到C:UsersThink.m2
修改settings.xml档案
F:/work/course/maven/mavenRepository/
指定仓库的路径
在这里mavenRepository就是仓库的路径
Maven的配置

bin中存放可执行的二进位制档案
conf存放settings.xml档案
lib 执行maven所依赖的jar包
maven的约定
src/main/java 存放专案的java档案
src/main/resources 存放专案的资原始档,如spring,hibernate的配置档案
src/test/java 存放所有的测试的java档案
src/test/resources 存放测试用的资原始档
target 专案输出位置
pom.xml 档案
四、maven专案
hello专案在eclipse建立一个专案Hello

建立一个包cn.itmayiedu.maven,并在该包下建立一个类

编写Hello类

在src/test/java中建立一个包cn.itcast.maven,建立一个测试类HelloTest

编写测试类

编辑pom.xml档案
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.itmayiedu
Hello
1.0
groupId这是专案组的编号,这在组织或专案中通常是独一无二的。 例如,每特教育com.itmayiedu拥有所有蚂蚁课堂相关专案。
artifactId这是专案的ID。这通常是专案的名称。 例如,consumer-banking。 除了groupId之外,artifactId还定义了artifact在储存库中的位置。
version这是专案的版本。与groupId一起使用,artifact在储存库中用于将版本彼此分离。
说明:
project:表示一个工程
modelVersion:为版本号
用maven命令编译专案(mvn compile)

在命令列出现这样的形式,说明编译OK了。
target资料夹的变化

可以看到编译后的档案全部放入到了target里。
clean
执行命令mvn clean

说明执行成功了。

可以看到target的目录没有了。
test
执行mvn test命令

说明执行成功了,并且运行了一个类,再次看target的结构

说明:
target/classes
存放编译后的类
target/test-classes
存放编译后的测试类
target/surefire-reports
存放测试报告
可以看出,只要进行测试,清理和编译可以自动执行了。
package
执行mvn package

这个界面说明打包成功了。

说明:
target/classes
编译后的类的路径
target/test-classes
编译后的测试类的路径
target/surefire-reports
测试报告
target/maven-archiver
执行package的归档
Hello-0.0.1-SNAPSHOT.jar
执行完package命令后打成的jar包
Hellofriend专案
建立HelloFriend专案工程

编写pom.xml档案
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.itmayiedu
Hellofriend
0.0.1
com.itmayiedu
Hello
0.0.1
执行mvn compile命令
执行这个命令的时候会出错,因为HelloFriend专案是建立在Hello专案基础之上的,但是现在工程中没有引入Hello.java这个类。所以会出错。
执行mvn clean install命令
1、开启命令列
2、把当前路径调节到Hello工程的根目录
3、执行mvn clean install命令,把Hello整个工程放入到仓库中

如果执行成功,则会在仓库中看到。

在仓库中的位置。
执行mvn package命令打包HelloFriend工程

说明成功了。

可以看到成功以后,在target目录下多了一个jar包
该jar包为当前工程的jar包。
建立cn.itcast.maven包及HelloFriend类

编辑HelloFriend类

建立cn.itcast.maven包和测试类HelloFriendTest类

编辑HelloFriendTest类

执行mvn package命令

上图中的”say hello”就是输出的结果。
五、maven的核心概念
专案物件模型

说明:
maven根据pom.xml档案,把它转化成专案物件模型(POM),这个时候要解析依赖关系,然后去相对应的maven库中查询到依赖的jar包。
在clean,compile,test,package等阶段都有相应的Plug-in来做这些事情。
而这些plug-in会产生一些中间产物。
外挂的位置
在maven解压后的位置F:workcoursemavenmaven有一个bin资料夹,里面有
一个档案m2.config档案
set maven.home default ${user.home}/m2,其中该路径指明了仓库的储存位置。

其中settings.xml档案中

这个说明了仓库中的位置。


这里的外挂就是执行maven的各种命令所需要的外挂。
maven座标
maven座标的主要组成
groupId:定义当前maven专案属于哪个专案
artifactId:定义实际专案中的某一个模组
version:定义当前专案的当前版本
packaging:定义当前专案的打包方式
根据这些座标,在maven库中可以找到唯一的jar包
依赖管理
继承管理

建立一个专案HelloParent
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.itmayiedu
HelloParent
0.0.1
pom
com.itmayiedu
Hello
0.0.1
Hellofriend、Hello专案继承HelloParent
仓库管理
可以根据maven座标定义每一个jar包在仓库中的储存位置。
大致为:groupId/artifactId/version/artifactId-version.packaging
仓库的分类
本地仓库
~/.m2/repository/
每一个使用者也可以拥有一个本地仓库
远端仓库
中央仓库:Maven预设的远端仓库
http://repo1.maven.org/maven2
私服:是一种特殊的远端仓库,它是架设在局域网内的仓库
映象:用来替代中央仓库,速度一般比中央仓库快
六、maven在eclipse中的应用
环境配置
如果所示,myeclipse自带maven,从上图看以看到Maven JDK是可以配置的,这里用了jdk1.6

从上图可以看出,我们可以利用myeclipse自带的maven,也可以使用自己的maven。
上图应用的就是自己的maven。
从最下面可以看出,这是settings.xml档案的路径。

这幅图说明了使用者的settings.xml档案的位置和使用者的仓库的位置。
这是最基本的环境的配置。
settings.xml档案
仓库的路径

通过配置localRepository的值可以改变仓库的路径。
配置私服的路径



直接连线互联网
如果不想连线私服,可以直接连线互联网。只需要把连线私服的所有的路径去掉即可。
建立maven工程
建立java project

选择Maven Project

选择快速建立maven-archetype-quickstart

填写group ID,Artiface Id,Version,Package属性
然后点选finish就可以了。
建立web project

新建立一个web project

新增maven support即可。
七、使用Maven建立(聚合)多模组功能

目录结构
----- itmayiedu-parent-----父工程
----- itmayiedu-service-----业务逻辑层
----- itmayiedu-web-----web层
构建itmayiedu-parent
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.itmayiedu
itmayiedu-parent
0.0.1-SNAPSHOT
pom
commons-lang
commons-lang
2.6
../itmayiedu-service
../itmayiedu-web
构建itmayiedu-service
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.itmayiedu
itmayiedu-parent
0.0.1-SNAPSHOT
../itmayiedu-parent/pom.xml
com.itmayiedu
itmayiedu-service
0.0.1-SNAPSHOT
构建itmayiedu-web
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.itmayiedu
itmayiedu-parent
0.0.1-SNAPSHOT
../itmayiedu-parent/pom.xml
com.itmayiedu
itmayiedu-web
0.0.1-SNAPSHOT
war
com.itmayiedu
itmayiedu-service
0.0.1-SNAPSHOT
javax.servlet
javax.servlet-api
3.1.0
启动方式
新增tomat启动即可。
八、Maven打包原理
一、Maven中央储存库当你建立一个 Maven 的专案,Maven 会检查你的 pom.xml 档案,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从预设的 Maven 中央储存库 http://search.maven.org/ 查询下载。
在Maven中,当你宣告的库不存在于本地储存库中,也没有不存在于Maven中心储存库,该过程将停止并将错误讯息输出到 Maven 控制台。
二、新增远端仓库
预设情况下,Maven从Maven中央仓库下载所有依赖关系。但是,有些库丢失在中央储存库,只有在Java.net或JBoss的储存库远端仓库中能找到。
现在,Maven的依赖库查询顺序更改为:
在 Maven 本地资源库中搜索,如果没有找到,进入下一步,否则退出。
在 Maven 中央储存库搜寻,如果没有找到,进入下一步,否则退出。
在Maven的远端储存库搜寻,如果没有找到,提示错误资讯,否则退出。
讲师画图
九、常用错误
错误原因①:pom.xml报错:web.xml is missing and is set to true
解决办法:
出现这个错误的原因是Maven不支援缺少web.xml的web专案
新增Web模组,对专案右键->Java EE Tools->Generate Deployment Descriptor Stub,这样就在
srcmainwebapp下面生成了WEB-INF资料夹和web.xml,问题解决.
错误原因②
‘parent.relativePath’ and ‘parent.relativePath’ points at wrong local POM @ line 4, column 10
解决办法
在应用parent工程中加上…/itmayiedu-parent/pom.xml
com.itmayiedu
itmayiedu-parent
0.0.1-SNAPSHOT
../itmayiedu-parent/pom.xml
错误原因③
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
解决办法 更换为自己本地的jdk即可。