Skip to content

Latest commit

 

History

History
212 lines (197 loc) · 8.05 KB

maven.md

File metadata and controls

212 lines (197 loc) · 8.05 KB

背景

构件工具演变

Maven服务于Java平台的自动构件工具
构件工具演变:

Make->Ant->Maven->Gradle

配置Maven相关环境变量

  • MAVEN_HOME 到bin上一级目录 不带bin

    E:\Maven\apache-maven-3.6.2

  • path 通常到bin目录 带bin

    E:\Maven\apache-maven-3.6.2\bin

  • 配置好后验证版本cmd里运行
    mvn -v
    

Maven相关知识

  1. Maven核心程序中仅仅定义了抽象的生命周期,具体的工作需要特定的插件来完成。而插件并不在Maven核心程序中。
  2. 当我们执行Maven命令时,Maven核心程序首先到本地仓库中查找插件,若没有则连接外网,到中央仓库下载。
  3. 本地仓库位置:系统当前用户的家目录\ .m2\repository
  4. 修改仓库位置:
  • maven安装目录下 \conf\settings.xml
  • 找到localRepository标签修改路径即可

构建

  • 清理:
    将以前编译得到的旧的class字节码删除,为下一次编译做准备
  • 编译:
    将java源程序文件编译成class字节码文件
  • 测试:
    自动测试,自动调用junit程序
  • 报告:
    测试程序执行的结果
  • 打包:
    动态Web工程打war包,java工程打jar包
  • 安装:
    Maven特定的概念——将打包得到的文件复制仓库中指定位置
  • 部署:
    将动态Web工程生成的war包复制到servlet容器的指定目录下,使其可以运行

Maven目录结构

项目名  
| --src源码  
| --|--main(主程序)  
| --|--|--java(源码)  
| --|--|--resources(资源文件或框架配置文件)  
| --|--test(测试程序)  
| --|--|--java(源码)  
| --|--|--resources(资源文件或框架配置文件)  
| --pom.xml(maven配置文件)

常用Maven命令

注意:执行与构建相关的Maven命令,必须进入pom.xml所在目录
mvn clean 清理
mvn compile 编译主程序
mvn test-compile 编译测试程序
mvn test 执行测试
mvn package 打包 mvn install 对于maven工程安装到本地仓库
mvn site 生成站点

Maven坐标

使用三个向量唯一定位一个Maven工程

groupid:公司或组织域名倒序+项目名
<groupid>com.phk.web</groupid>  
artifactid:模块名
<artifactid>socket</artifactid>  
version:版本号
<version>1.0.0</version>  

Maven工程的坐标与仓库中路径是对应的

Maven仓库

仓库的分类

  • 本地仓库:当前电脑上所有Maven工程服务
  • 远程仓库:
    • 私服:搭建在局域网环境中,为局域网范围内所有Maven工程服务
    • 中央仓库:架设在Internet上,为全世界所有Maven工程服务
    • 中央仓库镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快响应用户请求

仓库保存的内容:Maven工程

  • Maven自身所需的插件
  • 第三方框架或工具的jar包
  • 我们自己开发的Maven工程

Maven依赖

  • Maven依赖解析信息时会到本地仓库找被依赖的jar包。
  • 对于我们自己开发的Maven工程,使用mvn install命令安装到本地仓库

依赖范围<Scope>

默认为compile

  • compile
  • 对主程序有效
  • 对测试程序有效
  • 参与打包
  • test
  • 对主程序有效
  • 对测试程序有效
  • 参与打包
  • provide
  • 对主程序有效
  • 对测试程序有效
  • 参与打包
    例子:servlet-api.jar
    因为Tomcat容器提供了某些jar包,而开发时并没有这些jar包,部署时会被忽略。

依赖传递

依赖具有传递性,Maven会自动将所有需要依赖的自动添加到当前工程在,拓扑序吧

工程A->工程B
在工程A的pom.xml中加入工程B的依赖,然后工程B的所有可传递依赖会到工程A中

  • 可以传递的依赖不必在每个模块工程都重复声明,只需要在最底层工程依赖一次即可
  • 注意:非compile范围的依赖不能传递

依赖排除

<dependency>
  <exclusion>
    <groupId><\groudId> <!--设置排除的坐标即可-->
    <artifactId><\artifactId>
  <\exclusion>
<\dependency>

依赖冲突

  • 当依赖传递过来的一个jar包有不同版本的时候,传递路径短的jar包版本优先
  • 当两者路径长度相同时,再dependency内先声明者优先

统一管理依赖版本号

在pom.xml文件定义一个自定义标签
在其他依赖的version标签用${}来代替

<properties>
  <phk.version>1.0.0.RELEASE<\phk.version>
<\properties>

<groupId>servlet<\groudId> 
<artifactId>servlet<\artifactId>
<version>${phk.verson}<\version>

依赖继承

专程建立一个父工程来管理所有子工程的依赖,打包方式为pom
父工程:
配置依赖管理标签

<dependencyManagement>
  <dependenies>
    <groupId>servlet<\groudId> 
    <artifactId>servlet<\artifactId>
    <version>4.9<\version>
    <scope>provided<\scope>
  <\dependenies>
<\dependencyManagement>

子工程声明父工程

<parent>
   <groupId><\groudId>  //父工程坐标
    <artifactId><\artifactId>
    <version><\version>
    <!--以当前工程的pom为基准到父工程pom相对路径-->
    <relativePath><\relativePath>
<\parent>

子工程中删除重复部分:
例如删除<groupID>,<version>
配置继承后执行安装命令时要先安装父工程

聚合

作用:一键安装各个模块工程
配置方式:在父工程加入<modules>

<modules>
<!--指定各个子工程相对路径-->
  <module>../web<\module>
  <module>../UI<\**module**>
  <module><\module>
  <module><\module>
<\modules>

使用方式:在聚合工程上运行mvn install

Maven生命周期

  1. 各个构件环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
  2. Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
  3. Maven核心程序为了更好的实现自动化构件,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行
    • 生命周期的各个阶段仅仅定义了要执行的任务是什么。
    • 各个阶段和插件的目标是对应的。
    • 相似的目标由特定的插件来完成。

依赖查找网站

www.mvnrepository.com

2020.1.23完结