Maven详述

来源:互联网 发布:家用 网络安全设备 编辑:程序博客网 时间:2024/06/06 09:42

(一)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)聚合

原创粉丝点击