Maven使用-自动化构建工具

前言

当前与浏览器打交道的:

表示层分为: 视图层(html/css/js/jsp/H5) - 控制层(servlet/Action/Handler)
业务逻辑层分为:调用持久化层 Spring IOC AOP(工作在这一层,但并不能完全支持这个业务逻辑)
持久化层: 数据库(DB) 技术:JDBC(浅层次的封装)/DBUtils(工具类)/JDBCTemplate(spring提供的)
/Hibernate(实际要用的)/Mybatis(行业流行 )
数据库:Mysql / Oracle

问题

①一个项目就是一个工程
创建一个动态的web工程 (如果一个项目比较庞大就不适合使用package来划分模块)。
最好是每一个模块对应一个工程,利于分工协作,借助Maven就可以将一个项目拆分成多个工程

②项目中需要的jar包必须手动复制粘贴的到WEB-INF/lib目录下
这样会带来一个问题:同样的jar包文件重复出现在不同的项目工程中。一方面浪费存储空间,也让工程比较臃肿
利用Maven可以将jar包仅仅保存在仓库中,有需要使用的工程引用这个文件接口,并不需要把真的jar包复制过来。

③jar包需要别人替我们准备好,或者到官网下载
不同jar包提供的jar包下载的形式是不一样的,官网的jar包下载难,速度慢,服务器在国外
有些技术的官网就是通过Maven或SVN等专门的工具来提供下载的
如果以不规范的技术去下载jar可能下载的jar包也是不规范的
现在所有的jar包都存在了Maven的中央库中并且按照统一的规范
“ 统一的规范”对于开发非常重要

④一个jar依赖的其他jar包需要自己手动加入到项目中
Fileupload组件依赖于IO组件
Maven会自动将依赖的jar包导入进来

Maven是什么

Maven是一款服务于Java平台的自动化构建工具。

    **Make -Ant- Maven - Gradle**

构建

概念

以java源文件 框架配置文件 JSP HTML 图片等资源为原材料去生成一个可以运行的项目的过程
生产、编译、部署、搭建

环节

1) 清理 :将以前编译得到的旧文件的class字节码文件删除 ,为下一次编译做准备

2)编译: 将java源程序编译成class字节码文件

3)测试:自动测试,自动调用Junit程序

4)报告:测试程序执行的结果

5)打包:动态Web工程打War包,Java工程jar包

6)安装: Maven特定的概念——将打包得到的文件复制到仓库中指定的位置

7)部署:将动态Web工程生产的war包复制到Servlet容器的指定目录下,使其可以运行

安装Maven

①检查JAVA_HOME环境变量

②解压Maven核心程序的压缩包

③配置Maven环境变量 1)MAVEN_HOME 或M2_HOME 2)path

④验证: 运行mvn -v查看

概念

POM

坐标

依赖

仓库

生命周期/插件/目标

继承

聚合

第一个Maven工程

创建约定的目录结构

根目录:工程名
src目录:源码
pom.xml:Maven工程的核心配置文件
main目录:存放主程序
test:存放测试文件
java:存放java源文件
resource目录存放框架或其他工具的框架文件

①目录结构
    Hello
    |---src
    |---|---main
    |---|---|---java
    |---|---|---resources
    |---|---test
    |---|---|---java
    |---|---|---resources
    |---pom.xml

为什么要遵守约定的目录结构呢

Maven要负责项目的自动化构建,以编译为例,Maven要想自动进行编译,它必须知道java源文件保存在哪。
如果我们自定义的东西要想让工具知道
以配置的方式明确告诉框架

常用Maven命令

mvn clean :清理

mvn compile:编译主程序

mvn test-compile:编译测试程序

mvn test:执行测试

mvn package:打包

mvn site: 生成站点

关于联网问题

①Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成

而插件本身并不包含在Maven的核心程序中

②当我们执行的Mavenm命令需要运用到某些插件时,Maven核心程序会首先到本地仓库中查找。

③本地仓库的默认位置:{系统中当前用户的家目录} .m2\repository(可以自己修改,在Maven的setting.xml文件中加入)

<localRepository>存储目录</localRepository>

④Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库去下载(可以改下载的地址)

⑤如果此时无法连接外网,则构建失败

POM

Project Object Model项目对象模型
DOM Document Object Model
体现为pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置
重要程度相当于web.xml对于动态Web工程

坐标

Maven坐标(gav)
使用下面三个向量在仓库中唯一定位Maven工程
1)groupid:公司或组织域名倒序+项目名

<groupid> com.atguigu.maven</groupid>

2)artfactid: 模块名称

   <artfactid>Hello</artfactid>

3)version :版本

 <version>1.0.0</version>

对应关系

Maven工程的坐标于仓库中路径的对应关系

仓库:分为本地仓库和远程仓库
本地仓库:本地电脑上的Maven工程服务
远程仓库:
私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务 Nexus私服
中央仓库:架设在Inernet上,为全世界所有的Maven工程服务
中央仓库镜像:为了分担中央仓库的流量,提升用户的访问速度

仓库保存的内容:Maven工程
1)Maven自身所需要的插件
2)第三方框架或工具的jar包 第一方:jdk 第二方:自己
3)我们自己开发的Maven工程

依赖

依赖的范围:

compile

1)compile
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与、
参与部署:参与

test

2)test
对主程序无效
对测试程序有效
不参与打包
不参与部署

provided

3)provided
对主程序有效
对测试也有效
不参与打包
不参与部署
在开发的时候需要provided的依赖,但是在运行的时候不需要,由Tomcat(Servlet容器)来提供,
例如Servlet-api.jar

生命周期

①各个构建环节的顺序 :不能打乱顺序,必须按照既定的顺序去执行

②Maven的核心程序中定义了抽象的生命周期,生命周期中各个具体阶段的具体任务是由插件来完成的。

③ Maven核心程序为了更好的实现自动化构建,下面按照这一特点来执行生命周期中的各个阶段:

不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最开始最初的位置来执行

④插件 和目标
1)生命周期的各个阶段仅仅定义了要进行的任务是什么
2)各个阶段的插件和目标是对应的
3)相似的目标由特定的插件来完成
3)可以将目标看作“调用插件功能的命令”

继承

1)现状
Hello依赖的junit:4.0
HelloFriends依赖的junit:4.0
MakeFriend依赖的junit:4.9

由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致

2)需求:统一管理各个模块对于junit依赖的版本
3)解决思路:将junit依赖版本统一提取到“父”工程中,在子工程中声明junit依赖不指定版本,以父工程中统一设定的为准
同时也便于修改

4)操作步骤
①创建Maven工程作为父工程。 注意:打包的方式pom

在这里插入图片描述

②在子工程中声明对父工程的引用
在这里插入图片描述

③将子工程的坐标中与父工程坐标中重复的内容删除
在这里插入图片描述

④在父工程中统一管理junit的依赖
在这里插入图片描述

⑤在子工程中删除junit依赖的版本号部分

在这里插入图片描述

注意:配置继承后,执行安装命令时需要先安装父工程

聚合

①作用:一键安装各个模块工程

②配置方式:在一个总的聚合工程中去配置各个参与聚合的模块
在这里插入图片描述
③使用方式
在聚合工程的pom.xml点击右键 →run asmaven install

Maven仓库

https://mvnrepository.com/

结尾

在项目中很少去深究Maven的高级玩法,大多还是以它作为一种工具来使用,因此学会基本关系和如何导入依赖即可。

写maven项目加上去即可


<build>
   <resources>
       <resource>
           <directory>src/main/java</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
           </includes>
           <filtering>false</filtering>
       </resource>
       <resource>
           <directory>src/main/resources</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
           </includes>
           <filtering>false</filtering>
       </resource>
   </resources>
</build>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我菜菜就好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值