(一)Maven简介
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建 项目构建和依赖管理 .
(二)何为构建
构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程 .
可以从以下几个方面理解构建:
· 编译:Java源文件[.java] –>编译 –> Class字节码文件[.class] –>交给JVM执行
· 部署 : 一个BS项目实际上运行的是动态web工程“编译的结果”
(三)构建过程的几个主要环节
①清理 :删除以前的编译结果,为重新编译做好准备。
②编译 :将 Java 源程序编译为字节码文件。
③测试 :针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告 :在每一次测试后以标准的格式记录和展示测试结果。
⑤打包 :将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war 包。
⑥安装 :在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
⑦部署 :将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。
注:常用的maven命令
【1】mvn clean : 清理
【2】mvn compile : 编译主程序
【3】mvn test-compile:编译测试程序
【4】mvn test:执行测试
【5】mvn package:打包
【6】mvn install:安装
【7】mvn site:生成站点
(四)Maven核心概念
(1)POM
Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。Maven 工程的核心配置。
打开一个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.rwwh.hellomaven</groupId>
<artifactId>hellomaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build/>
</project>
~~详解pom.xml文件:
①modelVersion:当前Maven模型的版本号
②groupId:公司或组织的域名倒序+当前项目名称
③artifactId:当前项目的模块名称
④version:当前模块的版本
⑤packing:项目打包的类型
⑥dependencies和dependency:添加所依赖的jar包
(2)约定的目录结构
(3)坐标
Maven的坐标是由groupId + artifactId + version 构成,可以将groupId , artifactId ,version 作为目录结构到本地仓库中查找.
例:
<groupId>com.rwwh.hellomaven</groupId>
<artifactId>hellomaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
对应在本地仓库中目录结构:com/rwwh/hellomaven/hellomaven/0.0.1-SNAPSHOT
注:我们自己的Maven工程必须执行安装操作才会进入仓库。安装的命令是:mvn install
(4)依赖
① 何为依赖:当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,使用dependency 标签指定被依赖 jar 包的坐标就可以了
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
②依赖的范围(即设置scope)
常用的值有:compile、test、provided
[1]从项目结构角度理解 compile 和 test 的区别
[2]从开发和运行这两个不同阶段理解 compile 和 provided 的区别
[3]有效性总结
compile(典型例子:spring-core) | test(典型例子:junit) | provided(典型例子:servlet-api) | |
---|---|---|---|
主程序 | √ | × | √ |
测试程序 | √ | √ | √ |
参与部署 | √ | × | × |
③依赖的传递性
若A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不是 compile,如果是则可用,否则不可用
好处:传递的依赖不必在每个模块中都重复声明,在”最下面”的工程中依赖一次即可
④依赖排除的设置方式
<dependency>
<groupId>com.rwwh.maven</groupId>
<artifactId>HelloMaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<exclusions>
< < exclusion> >
<groupId>commons- - logging</groupId>
<artifactId>commons- - logging</artifactId>
</ exclusion> >
</exclusions
(5)仓库
①分类
[1]本地仓库:为当前本机电脑上的所有 Maven 工程服务。
[2]远程仓库:
《1》私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
《2》中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
《3》中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
②仓库中的文件
[1]Maven 的插件
[2]我们自己开发的项目的模块
[3]第三方框架或工具的 jar 包
※不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖
(6)生命周期(略)
(7)插件和目标
(8)继承
(9)聚合