(一)Maven简介

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建 项目构建和依赖管理 .

(二)何为构建

构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程 .

可以从以下几个方面理解构建:

· 编译:Java源文件[.java] –>编译 –> Class字节码文件[.class] –>交给JVM执行

· 部署 : 一个BS项目实际上运行的是动态web工程“编译的结果”

maven编译某个模块 maven编译项目_maven


(三)构建过程的几个主要环节

①清理 :删除以前的编译结果,为重新编译做好准备。

②编译 :将 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)约定的目录结构

maven编译某个模块 maven编译项目_maven_02


(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 的区别

maven编译某个模块 maven编译项目_jar_03


[2]从开发和运行这两个不同阶段理解 compile 和 provided 的区别

maven编译某个模块 maven编译项目_Java_04


[3]有效性总结

compile(典型例子:spring-core)

test(典型例子:junit)

provided(典型例子:servlet-api)

主程序


×


测试程序




参与部署


×

×

③依赖的传递性

若A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不是 compile,如果是则可用,否则不可用

maven编译某个模块 maven编译项目_jar_05


好处:传递的依赖不必在每个模块中都重复声明,在”最下面”的工程中依赖一次即可

④依赖排除的设置方式

<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 工程服务。

maven编译某个模块 maven编译项目_maven编译某个模块_06


《2》中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。

《3》中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

②仓库中的文件

[1]Maven 的插件

[2]我们自己开发的项目的模块

[3]第三方框架或工具的 jar 包

※不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖

(6)生命周期(略)

(7)插件和目标

(8)继承

(9)聚合