1.maven 简介
maven的介绍与使用.
主要作用
1. 清除 – mvn clean
2. 编译 – mvn complie
3. 测试 – mvn test
4. 打包 – mvn package
5. 将项目安装到maven本地资源库 – mvn install
6. 生成基于maven的项目文档站点 – mvn site
7. 部署站点 – mvn site-deploy
8. 部署基于maven的 war 文件到Tomcat – mvn tomcat:deploy 以 war 文件部署到 tomcat 下
2.maven 的下载 与 配置
下载
[配置]
1.环境变量配置
2.在 path 中加上配置
3.检验
3 maven 目录结构
4 install 命令 分析
如图所示
model02 引用 model01 时
-
1 首先编译 model02 ,model 02报错
model 02 指示 没有 发现 model 01 的jar -
2 编译,测试 model 01 都没问题
-
3 编译 model 02 还是 没有发现 model01 的jar
-
4 打包 model 01
-
5 编译 model 02 还是 没有发现 model01 的jar
-
6 安装(insert) model 01
-
7 编译 model 02 (编译成功)
总结: install 是 将 model01 的项目 打包后 生成的 jar 文件 发布到 本地仓库中 ,model02 才能 从本地仓库中 找到 model01 的jar 进行编译
5 maven相关知识
-
1 坐标 (也称为构建)
groupId = 组织名 或 公司网址的反写+项目名
如:csdn net.csdn.mp.porject
artifactId = 项目名-模块名
如:porject-email
version = 版本名
如:0.0.1 -
2 仓库
- 远程仓库
- https://repo.maven.apache.org/maven2
- 全球默认maven 仓库
- \lib\maven-model-builder-3.5.0.jar\org\apache\maven\model\pom-4.0.0.xml中
- 本地仓库
- 存在本地 jar 为 本地所在仓库
- 镜像仓库
- 更改本地仓库的位置
-
1 新建一个目录 d://mavenlib/
-
2 将 maven(本地maven目录)/conf/setting.xml 更改 本地仓库的位置
-
3 将 maven(本地maven目录)/conf/setting.xml 拷贝 到 movenlib 中
-
4测试
- 编译 项目 测试 ,查看 movenlib中有没有 jar
-
总结:修改本地目录 1.方便升级 maven 2.方便管理
-
- 远程仓库
6 idea上安装 maven (略)
7 maven 的插件的应用
maven插件官网
maven 的 核心是一个插件执行框架,所有工作都是通过插件完成过的。
- 构建期间将构建插件,并且应在pom 的 < build/> 元素中配置它们
- 报告插件将在站点身侧期间执行,并且应在POM的 < reporting /> 元素中进行配置
- 1 项目的构建过程包括
- 清理,编译,测试,打包,集成测试,验证,部署
- 2 maven 的生命周期
- clean 清理项目 (分为三个节点)
- pre-clean 执行清理前的工作
- clean 清理上一次构建生成的所有文件
- post-clean 执行清理后的文件
- default 构建项目 (四个常用的节点)
- complie
- test
- package
- install
- site 生成项目的站点 (分为四个节点)
- pre-site 在生成项目站点签要完成过的工作
- site 生成项目路的站点文档
- post-site 在生成项目站点后要完成过的工作
- site-deploy 发布身侧的站点到服务器上
案例
- clean 清理项目 (分为三个节点)
jar-no-fork类似于jar,但不分叉构建生命周期。 --官网翻译
clean,compile,test,package
在执行 package 这个 生命周期的时候 会执行 clean,complie,test,package 不用分开单独执行。
8 maven pom 标签讲解
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--maven 版本-->
<modelVersion>4.0.0</modelVersion>
<!--构建坐标 -->
<!--项目名-->
<groupId>com.ceba.fileplat</groupId>
<!--项目-模块名-->
<artifactId>fileplat-cloud</artifactId>
<!--版本-->
<!--0.0.1
第一个0 表示 大版本号
第二个0 表示 分支版本号
第三个0 表示 小版本号
SNAPSHOT 快照 版本
ALPHA 内部测试 版本
RELEASE 稳定版本
GA 正式发布版本
-->
<version>0.0.1-SNAPSHOT</version>
<!---->
<!--其他标签-->
<!--打包类型
jar (默认)
war (web容器下运行)
pom (继承时父模块的打包类型)
maven-plugin (maven 插件)
...
-->
<packaging>jar</packaging>
<!--项目名称-->
<name>fileplat-cloud</name>
<!--项目地址-->
<url></url>
<!--项目描述-->
<description>
*******
</description>
<!--项目开发人员名单-->
<developers>
<developer>
<name>***</name>
</developer>
</developers>
<!--许可证信息-->
<licenses></licenses>
<!--组织信息-->
<organization>
</organization>
<!---->
<!--依赖列表-->
<dependencies>
<!--依赖项-->
<dependency>
<!--坐标-->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!---->
<!--依赖类型
jar (默认)
pom (pom 项目)
war (war)
...
-->
<type></type>
<!--依赖范围
表示当前依赖存在的范围
java中代码存在范围(classpath)
compile (默认) 编译测试运行都有效
provided 编译测试有效
runtime 测试运行时有效
test 测试范围有效
system 编译测试有效 与本机系统相关联,可移植性差
import 导入的依赖范围,他只是用在 dependencyManagement 中
表示从其它的pom中导入 dependency 的配置
-->
<scope></scope>
<!--依赖是否可选
false (默认) 继承
true 引入
-->
<optional></optional>
<!--排除依赖的列表
-->
<exclusions>
</exclusions>
</dependency>
</dependencies>
<!---->
<!-- 依赖管理
主要应用于父项目中 用于 管理依赖的
-->
<dependencyManagement>
<!--依赖列表-->
<dependencies>
</dependencies>
</dependencyManagement>
<!---->
<!--构建-->
<build>
<!--插件列表-->
<plugins>
<!--插件-->
<plugin>
<!--坐标-->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!---->
<!--插件执行列表-->
<executions>
<!--插件执行-->
<execution>
<!--执行阶段 maven 生命周期的阶段-->
<phase></phase>
<!--执行目标-->
<goals>
<goal></goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!---->
<!--用于子模块中对于父模块的继承-->
<parent>
<!--坐标-->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!---->
<!--相对路径-->
<relativePath></relativePath>
</parent>
<!-- 用来聚合多个maven 项目-->
<modules>
<!-- 模块名称 -->
<module> </module>
</modules>
</project>
9 pom 依赖
- 依赖冲突
- 1.路径优先 (--> 代表是依赖关系)
A->B->C->D-common4.0.jar
A-F->common2.0.jar
最后 common jar 选择的版本 为 2.0
- 2.靠近优先
在路径一样过的基础上 谁 靠前(谁先写依赖项) 谁优先
- 依赖排除
10 pom 聚合
注:聚合的目的是为了方便一个项目中几个模块同时 清除,编译,测试,打包
11 pom 继承
注:方便管理所有项目共同拥有的部分
12 pom 插件运行
注:主要介绍 servlet 容器 插件的使用 比如 tomact servlet 的容器的使用
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<!--provided 编译测试有效-->
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<!-- 打包阶段 -->
<phase>package</phase>
<goals>
<!-- 目标运行 -->
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
继承 聚合 中插件的使用
注
<dependencyManagement>
<dependencies>
<!-- servlet 容器
https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<!--provided <scope>provided</scope> 编译测试有效-->
</dependency>
</dependencies>
</dependencyManagement>
<!-- 1.如上写法 子项目 如果需要引用 javax.servlet-api 依赖项 则需要 在 <dependencies> 中 添加 (不需要version)-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- 2.没有写在 dependencyManagement 里的依赖项 则 会 自动引用 无需添加-->
<!--3 聚合的 子项目也要 加上 parent 带包聚合的项目-->