(学习笔记)Maven基础

1.目前掌握的技术

2.目前的技术在开发中存在的问题【why】
一个项目就是一个工程
如果项目非常庞大,就不适合继续使用package来划分模块。最好是每一个模块对应一个工程,利于分工协作。
解决方法:借助Maven就可以将一个项目拆分成多个工程。
项目中需要的jar包必须手动"复制"、 “粘贴”到WEB-INF/lib目录下
带来的问题:同样的jar包重复出现在不同的项目工程中,一方面浪费存储空间,另一方面也会让项目工程比较臃肿。
解决方法:借助于Maven,可以将jar包仅仅保存在"仓库“中,有需要的使用的工程“引用”这个文件接口,并不需要真的把jar包复制过来。
jar包需要别人替我们准备好,或者到官网下载
不同技术的官网提供jar包下载的形式是不同的。
有些技术的官网就是通过Maven或者SVN等专门的工具来提供下载的。
非官方方式下载的jar包,其中的内容可能是不规范的。
解决办法:借助于Maven我们可以以一种规范的方式下载jar包,因为所有知名框架或者第三方工具的jar包已经按照统一的规范存放在了Maven的中央仓库中。所以,以规范的方式下载的jar包,内容也是可靠的。
一个jar包依赖的其他jar包需要自己手动加入到项目中
文件的上传需要File Upload组件—>IO组件。相互依赖的jar包,如A.jar需要依赖于B.jar,当导入A.jar包时,maven会自动导入B.jar。

  1. Maven是什么【what】
    Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
    POM(Project Object Model):项目对象模型

  2. Maven是一款服务于java平台的自动化构建工具。(Maven本身也是Java写的)
    Make ——> Ant ——> Maven ——> Gradle
    2.构建
    概念:以“Java源文件”、“框架的配置文件”、“JSP”、“HTML”、“图片”等资源为“原材料”,去“生产”一个可以运行的项目的过程。
    编译
    部署
    搭建
    编译:Java源文件[User.java]——>编译——>Class字节码文件[User.class]——>交给虚拟机JVM去执行。
    部署:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程”编译的结果“。
    生的鸡——>处理——>熟的鸡
    动态Web工程——>编译、部署——>编译结果
    构建过程中的各个环节
    清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
    编译:将Java源程序编译成为class字节码文件
    测试:自动测试,自动调用junit程序
    报告:测试程序执行的结果
    打包:动态Web工程打war包,Java工程打jar包
    安装:Maven特定的概念——将打包得到的文件复制到“仓库”中的指定位置
    部署:将动态Web工程生成的war包复制到Servlet容器的制定目录下,使其可以运行
    自动化构建

4.安装Maven核心程序
检查JAVA_HOME
解压Maven核心程序的压缩包,放在一个非中文无空格路径下
配置Maven相关的环境变量
MAVEN_HOME或者M2_HOME
path
5.Maven的核心概念:mvnrepository.com
约定的目录结构
POM
坐标:
Maven中的坐标用于描述仓库中资源的位置
Maven坐标主要组成
groupid:定义当前 Maven项目隶属于组织名称(通常是域名反写,例如:org.mybatis)
artifactid:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
version:定义当前项目版本号
packaging:定义该项目的打包方式 (不属于Maven的坐标)
作用:使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。
依赖
依赖配置
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
格式:

junit junit 4.11 test 依赖传递

依赖具有传递性:
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源。

依赖传递冲突问题:
路径优先:当前依赖中出现相同资源时,层级越深,优先级越低,层级越浅,优先级越高。
声明优先:当资源在相同层级被依赖时,配置顺序靠后的覆盖配置顺序靠前的。
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。

可选依赖
可选依赖指对外隐藏当前依赖的资源—不透明

junit
junit
4.12

true

排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要

junit
junit
4.12




org.hamcrest
hamcrest-core



依赖范围
依赖的jar默认情况下可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围:
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件范围内)
是否参与打包(package指令范围内)

依赖范围的传递性:
带有依赖范围的资源再进行传递时,作用范围将会受到影响

仓库(repository)
仓库用于存储资源,包含各种jar包
仓库的分类:
本地仓库:自己电脑上存储资源的仓库,连接远程仓库资源
/Users/mahuan/Documents/programFile/maven-repository
远程仓库:非本机电脑上的仓库,为本地仓库提供资源
中央仓库:Maven团队维护,存储所有资源的仓库

nexus-aliyun central Nexus aliyun https://repo.maven.apache.org/maven2/ 私服:部门/公司范围内存储资源的仓库,从中央仓库中获取资源 全局setting和用户setting的区别 全局setting定义了当前计算器中Maven的公共配置 用户setting定义了当前用户的配置(可以在自定义仓库外面再复制一个setting.xml,作用是比如自己公司有自己的私服,所以在这个XML文件中修改镜像的下载地址。 私服的作用: 保存具有版权的资源,包含购买或自主研发的jar 中央仓库的jar都是开源的,不能存储具有版权的资源 一定范围内共享资源,仅对内部开放,不对外共享 生命周期/插件/目标 构建生命周期 编译——>对测试代码编译——>测试——>打包——>安装;

Maven构建生命周期描述的是一次构建过程经历了多少个事件
Maven对项目构建的生命周期分为三套
clean:清理工作
clean生命周期

default:核心工作,例如编译、测试、打包、部署等等
defaylt生命周期

site:产生报告,发布站点等
site生命周期

插件(到Maven官网,查看插件功能)
插件与生命周期内的阶段进行绑定,在执行到对应生命周期时执行对应的插件功能

默认Maven在各个生命周期上绑定有预设功能
通过插件可以自定义其他功能
总结:生命周期表示几岁,插件表示对应几岁所干的那件事
继承
聚合
6.第一个Maven工程
创建约定的目录结构
根目录:工程名;
src目录:源码;
pom.xml文件:Maven工程的核心配置文件;

<?xml version="1.0" encoding="UTF-8"?>


4.0.0

org.mh.example

My_Study_Maven_A

1.0-SNAPSHOT

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>
main目录:存放主程序; test目录:存放测试程序; Java目录:存放Java源文件; resource目录:存放框架或其他工具的配置文件; 为什么要遵守约定的目录结构? Maven要负责我们这个项目的自动化构建,以编译为列,Maven要想自动进行编译,那么它必须知道Java源文件保存在哪里。 如果我们自己自定义的东西想要让框架或工具知道,有两种办法: 以配置的方式明确告诉框架 classpath:spring-context.xml 遵守框架内部已经存在的约定 log4j.propertieslog4j.xml 约定 > 配置 > 编码

7.常用Maven命令
注意:执行与构建过程相关的Maven命令,必须进入pom.xml的目录
于构建过程相关:编译、测试、打包、…
常用命令
mvn clean:清理
mvn compile:编译主程序
mvn test-complie:编译测试程序
mvn test:执行测试
mvn package:打包 ---- 包含了前面很多操作,它要确保要打包的项目没有问题。
mvn install:安装到本地仓库 — 将刚刚打包的jar包放入到本地仓库中去
8.关于联网问题
Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在Maven的核心程序中。
当我们执行的Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。
本地仓库的默认位置:[系统中当前用户的家目录:.m2\repository]
Maven核心程序如果在本地仓库找不到需要的插件,那么它会自动连接外网,到中央仓库去下载。
如果此时无法连接外网,则构建失败。

构建Web项目后的pom.xml文件的详细解释:

<?xml version="1.0" encoding="UTF-8"?>

4.0.0

org.example

My_Study_Maven_Web_A

1.0-SNAPSHOT

war

My_Study_Maven_Web_A Maven Webapp

http://www.example.com

junit junit 4.11 test org.apache.tomcat.maven tomcat7-maven-plugin 2.1 80 /
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值