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:\work\course\maven\maven\bin
把该目录追加到环境变量的 path 中。
利用命令行检查是否成功
有这个图,说明 maven 安装成功了。
建库
先打开路径
C:\Users\Think\.m2
把 settings.xml 文件复制到上述的路径中
F:\work\course\maven\apache-maven-3.0.5-bin\apache-maven-3.0.5\conf
有一个 settings.xml 文件,复制到 C:\Users\Think\.m2
修改 settings.xml 文件
<localRepository>F:/work/course/maven/mavenRepository/</localRepository>
指定仓库的路径
在这里 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 文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itmayiedu</groupId>
说明:
project:表示一个工程
modelVersion:为版本号
用 maven 命令编译项目(mvn compile)
在命令行出现这样的形式,说明编译 OK 了。
target 文件夹的变化
可以看到编译后的文件全部放入到了 target 里。
clean
执行命令 mvn clean
说明执行成功了。
可以看到 target 的目录没有了。
五、 maven 的核心概念
项目对象模型
说明:
maven 根据 pom.xml 文件,把它转化成项目对象模型(POM),这个时候要解析依
赖关系,然后去相对应的 maven 库中查找到依赖的 jar 包。
在 clean,compile,test,package 等阶段都有相应的 Plug-in 来做这些事情。
而这些 plug-in 会产生一些中间产物。
插件的位置
在 maven 解压后的位置 F:\work\course\maven\maven 有一个 bin 文件夹,里面有
一个文件 m2.config 文件
set maven.home default ${user.home}/m2,其中该路径指明了仓库的存储位置
其中 settings.xml 文件中
这个说明了仓库中的位置。
这里的插件就是执行 maven 的各种命令所需要的插件。
maven 坐标
maven 坐标的主要组成
groupId:定义当前 maven 项目属于哪个项目
artifactId:定义实际项目中的某一个模块
version:定义当前项目的当前版本
packaging:定义当前项目的打包方式
根据这些坐标,在 maven 库中可以找到唯一的 jar 包
依赖管理
继承管理
创建一个项目 HelloParent
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<!-- 属于那些分组, 一般以公司名称名称开头 -->
<groupId>com.itmayiedu</groupId>
<!-- 一般为项目名称 -->
<artifactId>HelloParent</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<!-- 属于那些分组, 一般以公司名称名称开头 -->
<groupId>com.itmayiedu</groupId>
<!-- 一般为项目名称 -->
<artifactId>Hello</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
</project>
Hellofriend、Hello 项目继承 HelloParent
仓库管理
可以根据 maven 坐标定义每一个 jar 包在仓库中的存储位置。
大致为:groupId/artifactId/version/artifactId-version.packaging
仓库的分类
本地仓库
~/.m2/repository/
每一个用户也可以拥有一个本地仓库
远程仓库
中央仓库:Maven 默认的远程仓库
http://repo1.maven.org/maven2
私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
镜像:用来替代中央仓库,速度一般比中央仓库快
六、 maven 在 eclipse 中的应用
环境配置
七、使用 Maven 建立(聚合)多模块功能
目录结构
----- itmayiedu-parent----- 父工程
----- itmayiedu-service----- 业务 逻辑层
----- itmayiedu-web-----web 层
构建 itmayiedu- -
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-lang/commons-
lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
<modules>
<module>../itmayiedu-service</module>
<module>../itmayiedu-web</module>
</modules>
</project>
八、 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 <failOnMissingWebXml> is set to true
解决办法:
出现这个错误的原因是 Maven 不支持缺少 web.xml 的 web 项目
添加 Web 模块,对项目右键->Java EE Tools->Generate Deployment Descriptor Stub,这样就在
src\main\webapp 下面生成了 WEB-INF 文件夹和 web.xml,问题解决.
错误原因②
'parent.relativePath' and 'parent.relativePath' points at wrong local POM @ line 4, column 10
解决办法
在应用parent工程中加上 <relativePath>../itmayiedu-
parent/pom.xml</relativePath>
<parent>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../itmayiedu-parent/pom.xml</relativePath>
</parent>
错误原因③
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
解决办法 更换为自己本地的 jdk 即可。