Maven-复习笔记


Maven-复习笔记

一.Maven简介
使用Maven的优点
  1. 工程和jar包分离

  2. 自动下载依赖包

maven中央仓库:Maven仓库地址
构建过程
  1. 清理:清除上一次编译得到的class字节码文件

  2. 编译:将Java源程序编译成新的字节码文件

  3. 测试:自动测试,自动调用junit

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

  5. 打包:动态Web工程打成war包,Java工程打成jar包

  6. 安装:Maven特定的一个概念,将打包的到的文件复制到仓库中的指定位置

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

注意 如果执行后面的命令,会连同前面的命令一起执行

构建顺序 compile→test-compile→test→package→install



二.Maven 的安装
  1. 安装jdk,配置java环境变量

  2. 下载解压Maven安装包,非中文,无空格路径

  3. 配置Maven全局环境变量(如果不想在全局CMD中使用,也可以不配)

    MAVEN_HOME: D:\apache-maven-3.6.0 (maven的安装路径)

    PATH: MAVEN_HOME\bin

  4. 在cmd窗口中运行mvn -v 指令查看Maven是否配置成功



三.Maven 的配置
配置阿里云的远程仓库(如果不配置会在官方的默认仓库下载,下载速度一般贼慢):

在setting.xml中<mirrors>标签内添加:

<mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/groups/public/</url>
 </mirror> 


四.常用Maven命令

注意
1. 如果没有配置Maven全局环境,就要在Maven的安装目录下,进入CMD执行,如果配置了Maven全局环境,可以在任意目录的CMD下执行
2. 行与构建过程相关的Maven命令(编译,测试,打包),必须进入pom.xml所在的目录
3. 在工程中,如果test中resources中如果没有配置文件,会自动去main中的resources目录下读取

创建Maven项目

mvn archetype:generate

-DgroupId=[groupId]

-DartifactId=[artifactId]

-DarchetypeArtifactId=[项目类型,如maven-archetype-quickstart]

-DinteractiveMode=[false/true] (交互模式)


一键构建项目并执行:

mvn tomcat:run

在这里插入图片描述

注意 执行完之后工程的目录多了一个target文件夹


清除编译后的目录(target)

mvn clean

注意 执行之后target目录被删除


编译

mvn compile

注意 生成target目录,只编译main目录下的代码


测试编译

mvn test-compile

注意 生成target目录,只编译test目录下的代码


运行测试代码

mvn test


打包

mvn package

注意 执行完成之后会在target目录下多出一个war包或jar包

注意 如果要打成war包,需要在POM.xml文件中配置打包类型为war

<groupId>com.alasky<groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

发布项目到本地仓库中

mvn install


发布到远程库中:

mvn deploy (需要在POM.xml文件中指定远程库,否则会发布失败)


生成描述文档

mvn site

注意 执行完后在target/site中会有新文件生成



五.POM (Project Object Model 项目对象模型)


六.坐标

使用下面三个向量在仓库中唯一定位一个Maven工程

<groupId>XXX/groupId>
<artifactId>XXX</artifactId>
<version>1.0-SNAPSHOT</version>
  1. groupid: 公司或组织域名倒序+项目名

  2. artifactid: 模块名

  3. version: 版本号



七.仓库
  • 本地仓库: 当前电脑上部署的仓库目录
  • 远程仓库:
    • 私服(Nexus): 大家在局域网环境中,为局域网环境范围的所有Maven工程服务
      中央仓库: 架设在Internet上,为全世界所有的Maven工程服务
      中央仓库镜像: 为了分担中央仓路的流量,提升用户访问速度


八.依赖
导入依赖的过程

本地→远程(私服)→中央仓库

依赖的范围 (在pom文件里面配置<scope>标签)
  1. compile: 对主程序和测试程序都有效,参与打包范围

  2. test: 对测试程序有效

  3. provide: 对主程序和测试程序都有效,但是不参与打包,因为服务器可以提供

注意 比如servlet-api.jar和jsp-api.jar,如果tomcat里面有的jar包,如果在maven里面设置成compile,那么在部署时会出现冲突(工程里面一个,tomcat里面一个)

依赖的传递性

如果A工程依赖B工程,那么如果B工程导入了一个新的依赖,Maven会自动在A工程中也导入这个依赖,但是需要注意,非compile范围的依赖不能传递

依赖的排除

如果某个导入的或者传递过来的依赖出现冲突,或者不想使用,在其父依赖中配置<exclusions>标签可以将其排除,排除之后也会影响这个依赖的传递性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMGmjiYc-1575542634810)(Maven(一)].assets/1575536685257.png)

依赖的原则
  1. 如果由于依赖的传递,导致出现不同版本的多个相同的依赖,那么会按照就近原则传递,即只传递上一个工程的依赖版本

    例如,下图中,C继承B,B继承A,那么C将会使用B中依赖的版本

    C log4j.1.2.14
    B log4j.1.2.14
    A log4j.1.2.17
  2. 如果出现两个路径举例相同的依赖,哪个依赖最先声明就使用哪个

    如下图,如果A同时继承B和C,如果B在A的pom文件中先声明,A就继承B中依赖的版本

A log4j.1.2.14
B log4j.1.2.14
C log4j.1.2.17

##### 依赖版本的统一

  1. 使用<properties>标签设置一个自定义标签
  2. 在依赖的版本上使用${自定义标签名}
生命周期
  • 各个构建环节按照顺序来执行,不能打乱顺序

    构建顺序 compile→test-compile→test→package→install

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

继承
  1. 创建一个Maven父工程,打包方式为pom
<groupId>com.abc</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
  1. 在子工程中声明父工程
<parent>
	<groupId>com.abc</groupId>
	<artifactId>parent</artifactId>
	<packaging>pom</packaging>
    <!--以当前文件为基准的付工程pom.xml文件的相对路径-->
</parent>
  1. 子工程的依赖坐标中版本标签<version>就可以不用写了,(即不指定版本号,默认使用父工程中相同依赖的版本号),如果想用与父工程不同的版本,就再把<version>标签写上去

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bOPDSJL-1575542634810)(Maven(一)].assets/1575541625321.png)

    注意 如果使用了继承,在安装子工程之前,需要先安装父工程,可以使用聚合来一键安装所有的工程,在聚合工程中(一般是父工程),配置<modules>签,其中包括所有的模块

聚合

如果一个项目中包括很多模块,即一个父工程包括很多子工程(模块),那么可以在父工程中使用<modules>标签将子工程引入,导出时就可以一次将整个项目全部导出

<!--假设一个父工程有3个(ABC)子工程,使用相对路径引入各个子工程-->
<modules>
	<module>../A</module>
    <module>../B</module>
    <module>../C</module>
</modules>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值