Maven自动化构建工具(01)

Maven自动化构建工具

1、Maven简介

1.1传统项目开发存在的问题

  • 一个项目做成一个工程,造成工程比较庞大,需要使用多模块来划分项目;
  • 项目中需要的数量众多的 jar包,需要手动下载并引入,并且多个项目需要的 jar 包存在重复的问题;
  • 项目中需要的 jar 包有版本兼容的问题,需要手动解决;
  • 项目中需要的 jar 包又依赖其它的 jar 包,需要手动解决。

1.2 Maven 概述

  • Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。
  • Maven是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具。
  • Maven 可以整合多个项目之间的引用关系,我们可以根据业务和分层需要任意拆分一个项目;
  • Maven 提供规范的管理各个常用 jar包及其各个版本,并且可以自动下载和引入项目中; Maven 可以根据指定版本自动解决 jar 包版本兼容问题;
  • Maven 可以把 jar 包所依赖的其它 jar 包自动下载并引入项目。 类似自动化构建工具还有:Ant, Maven, Gradle。

构建过程中的各个环节:清理、编译、测试、报告、打包、安装、部署。

  • 构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。 构建过程的几个主要环节
  • ①清理:删除以前的编译结果,为重新编译做好准备。 ②编译:将Java源程序编译为字节码文件。
  • ③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。 -
  • ④报告:在每一次测试后以标准的格式记录和展示测试结果。
  • ⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应war包。
  • ⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
  • ⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。

1.3 Maven 核心概念
Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从 Maven的九个核心概念入手,看看Maven是如何实现自动化构建的

  • ①POM
  • ②约定的目录结构
  • ③坐标
  • ④依赖管理
  • ⑤仓库管理
  • ⑥生命周期
  • ⑦插件和目标
  • ⑧继承
  • ⑨聚合

1.4 安装 Maven 环境
1、 确保安装了 java 环境:maven 本身就是 java 写的,所以要求必须安装 JDK。
查看 java 环境变量:echo %JAVA_HOME%
2、 下载并解压 maven 安装程序:
maven下载安装 http://maven.apache.org/download.cgi
3、 配置 Maven 的环境变量:
MAVEN_HOME=d:/apache-maven-3.3.9 或者 M2_HOME=d:/apache-maven-3.3.9
path=%MAVEN_HOME%/bin; 或者%M2_HOME%/bin;
4、 验证是否安装成功:
mvn –v

2、Maven 的 核心

2.1 Maven 工程 工程 约定 目录结构

  • maven 中约定的目录结构:

MyMavenTest
|—src
|—|---main
|—|---|—java
|—|---|—resources
|—|---test
|—|---|—java
|—|---|—resources
|—pom.xml

  • 说明:MyMavenTest:根目录,也就是工程名
  • src:源代码
  • main:主程序
  • java:主程序的 java 源码
  • resources:主程序的配置文件
  • test:测试程序 java:测试程序的 java 源码
  • resources:测试程序的配置文件
  • pom.xml:Maven 工程的核心配置文件。
    一般情况下,我们习惯上采取的措施是:约定>配置>编码
    maven 的 pom.xml 记录的关于构建项目的各个方面的设置,maven 从 pom.xml 文件开始,按照助约定的 工程目录编译,测试,打包,部署,发布项目。
    pom.xml 文件认识
    在这里插入图片描述
    2.3 仓库
    2.3.1 仓库的概念
    maven有仓库的概念。在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven核心程序仅仅定义了自动化构建项目的生命周期,但具体的构建工作是由特定的构件完成的。而且为了提高构建的效率和构件复用,maven把所有的构件统一存储在某一个位置,这个位置就叫做仓库。
    2.3.2 仓库存什么

仓库是存放东西的,Maven 仓库的是:

  • Maven 的插件,插件也是一些 jar,这些 jar 可以完成一定的功能。
  • 我们自己开发项目的模块
  • 第三方框架或工具的 jar 包

2.3.3 仓库的类别

根据仓库存储的位置,把仓库分为本地仓库和远程仓库。

  • 本地仓库,存在于当前电脑上,默认存放在~.m2\repository中,为本机上所有的Maven工程服务。你也可以通过Maven的配置文件Maven_home/conf/settings.xml中修改本地仓库所在的目录。
    ~ 是用户的主目录,windows系统中是 c:/user/登录系统的用户名

  • 远程仓库,分为为全世界范围内的开发人员提供服务的中央仓库、为全世界范围内某些特定的用户提供服务的中央仓库镜像、为本公司提供服务自己架设的私服。中央仓库是maven默认的远程仓库,其地址是:http://repo.maven.apache.org/maven2/

  • 中央仓库,包含了绝大多数流行的开源Java构件,以及源码、作者信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载得到。

  • 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件 上传到私服上。

  • 分类说明:

  • 1)本地仓库:本机当前电脑上的资源存储位置,为本机上所有 Maven工程提供服务

  • 2)远程仓库:不在本机上,通过网络才能使用。多电脑共享使用的。

  • ①:中央仓库:通过Internet访问,为全世界所有 Maven工程服务。 最权威的。

  • ②:中央仓库的镜像:架设在不同位置,欧洲,美洲,亚洲等每个洲都有若干的服务器,为中央仓库分担流量。减轻中央仓库的访问,下载的压力。所在洲的用户首先访问的是本洲的镜像服务器。

  • ③:私服:在局域网环境中部署的服务器,为当前局域网范围内的所有Maven工程服务。公司中常常使用这种方式。

2.3.4 Maven 对仓库的使用

  • 在 Maven 构建项目的过程中如果需要某些插件,首先会到 Maven 的本地仓库中查找,如果找到则可以直接使用如果找不到,它会自动连接外网,到远程中央仓库中查找;如果远程仓库中能找到,则先把所需要的插件下载到本地仓库,然后再使用,并且下次再用到相同的插件也可以直接使用本地仓库的;如果没有外网或者远程 仓库中也找不到,则构建失败。

    资源搜索地址:https://mvnrepository.com/

2.4 Maven 的生命周期

  • 对项目的构建是建立在生命周期模型上的,它明确定义项目生命周期各个阶段,并且对于每一个阶段提供相对应的命令,对开发者而言仅仅需要掌握一小堆的命令就可以完成项目各个阶段的构建工作。构建项目时按照生命周期顺序构建,每一个阶段都有特定的插件来完成。不论现在要执行生命周期中的哪个阶段,都是从这个生命周期的最初阶段开始的。对于我们程序员而言,无论我们要进行哪个阶段的构建,直接执行相应的命令即可,无需担心它前边阶段是否构建,Maven都会自动构建。这也就是 Maven 这种自动化构建工具给我们带来的好处。

2.5 Maven 的常用命令

  • Maven 对所有的功能都提供相对应的命令,要想知道 maven 都有哪些命令,那要看 maven 有哪些功能。maven三大功能:管理依赖、构建项目、管理项目信息。管理依赖,只需要声明就可以自动到仓库下载;管理项目信息其实就是生成一个站点文档,一个命令就可以解决,那 maven 功能的主体其实就是项目构建。Maven 提供一个项目构建的模型,把编译、测试、打包、部署等都对应成一个个的生命周期阶段,并对每一个阶段提供相应的命令,程序员只需要掌握一小堆命令,就可以完成项目的构建过程。
  • mvn clean 清理(会删除原来编译和测试的目录,即target 目录,但是已经 install 到仓库里的包不会删除)
  • mvn compile 编译主程序(会在当前目录下生成一个target, 里边存放编译主程序之后生成的字节码文件) mvn test-compile 编译测试程序(会在当前目录下生成一个target,里边存放编译测试程序之后生成的字节码文件)
  • mvn test测试(会生成一个目录surefire-reports,保存测试结果)
  • mvn package 打包主程序(会编译、编译测试、测试、并且按照
  • pom.xml 配置把主程序打包生成 jar 包或者 war 包)
  • mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
  • mvn deploy部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。 还会自动把项目部署到 web 容器中)。
  • 注意:执行以上命令必须在命令行进入 pom.xml 所在目录!

2.5 插件
maven 过程构建周期,由 maven 的插件 plugin 来执行完成。
官网插件说明:http://maven.apache.org/plugins/
在项目根目录下执:mvn clean install
解释说明

  • 2.5.1 clean 插件 maven-clean-plugin:2.5
    clean 阶段是独立的一个阶段,功能就是清除工程目前下的 target 目录
  • 2.5.2 resources 插件 maven-resources-plugin:2.6
    resource 插件的功能就是把项目需要的配置文件拷贝到指定的目当,默认是拷贝 src\main\resources 目录下的件到
    classes 目录下
  • 2.5.3 compile 插件 maven-compiler-plugin
    compile 插件执行时先调用 resouces 插件,功能就是把 src\mainjava 源码编译成字节码生成 class 文件,并把编译好
    的 class 文件输出到 target\classes 目录下
  • 2.5.4 test 测试插件
    单元测试所用的 compile 和 resources 插件和主代码是相同的,但执行的目标不行,目标 testCompile 和 testResources
    是把 src\test\java 下的代码编译成字节码输出到 target\test-classes,同时把 src\test\resources 下的配置文件拷贝到
    target\test-classes
  • 2.5.5 package 打包插件 maven-jar-plugin
    这个插件是把 class 文件、配置文件打成一个 jar(war 或其它格式)包
  • 2.5.6 deploy 发布插件 maven-install-plugin
    发布插件的功能就是把构建好的 artifact 部署到本地仓库,还有一个 deploy 插件是将构建好的 artifact 部署到远程
    仓库
  • 2.5.7 常用插件
    插件可以在自己的项目中设置,最常使用的是 maven 编译插件。设置项目使用的 jdk 版本时通过编译插件指定。
    pom.xml 文件中设置。

<build>
	<plugins>
<		plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.8.1</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
	</plugins>
</build>

2.6 坐标(gav)

  • Maven 把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示。坐标在仓库中可以唯一定位一个 Maven
    项目。
    groupId:组织名,通常是公司或组织域名倒序+项目名
    artifactId:模块名,通常是工程名
    version:版本号

    需要特别指出的是,项目在仓库中的位置是由坐标来决定的:groupId、artifactId 和 version决定项目在仓库中的路径,artifactId 和 version 决定 jar 包的名称。

2.7 依赖(dependency)

  • 一个 Maven 项目正常运行需要其它项目的支持,Maven 会根据坐标自动到本地仓库中进行查找。对于程序员自己的 Maven
    项目需要进行安装,才能保存到仓库中。不用 maven 的时候所有的 jar 都不是你的,需要去各个地方下载拷贝,用了 maven 所有的
    jar 包都是你的,想要谁,叫谁的名字就行。maven 帮你下载。

pom.xml 加入依赖的方式:
log4j 日志依赖

<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.17</version>
</dependency>

junit 单元测试依赖

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.11</version>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值