Maven笔记

Mavne概念

  •   Apache Maven是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档,最强大的功能就是能够自动下载项目依赖

功能

  • 主要服务于基于Java平台的项目构建,依赖管理和项目信息管理
  • 跨平台:基于Java平台的项目构建
  • 自动化:自动下载依赖
  • 标准化:项目结构统一标准
  • 可重用:POM可重用设计

核心概念

仓库

  • 在Maven中,任何一个jar包,插件或者项目构建的输出,都可以称之为构件
  • Maven在某个统一的位置存储所有项目的共享构件,这个统一的位置,我们就称之为仓库
  • 仓库就是存放构件的位置

中央仓库

  • 包含了绝大多数流行的开源Java构件,以及源码,作者信息,SCM (Software config Managment) 信息 许可信息等
  • 开源的Java项目依赖的构件都可以在这里下载到
  • 地址: http://repo.maven.apache.org/maven2

本地仓库

  • 是maven在本机存储构件的地方
  • maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才会被创建
  • 默认位置:在操作系统用户的目录下.m2/repository/。仓库位置可以修改。

远程仓库

  • 远程仓库是中央仓库的替代品(镜像)
  • 主要作用是加快周边地区的访问速度

坐标

  • 在maven中,任何一个构件都有一个唯一标识
  • 这个标识 至少包含组织编码 <groupId>  项目编码  <artifactId>  版本信息 <version>
  • 坐标就是构件在仓库中的定位

依赖管理

  • 在pom.xml中的节点<dependency>为一个依赖(基本依赖信息包含组织编码 <groupId>  项目编码  <artifactId>  版本信息 <version>)
  • 坐标是依赖的基本信息
  •  1 <dependencies>
     2     <!-- Spring依赖包 -->
     3     <dependency>
     4          <!-- 组织编码 -->   
     5         <groupId>org.springframework</groupId>
     6          <!-- 项目编码 -->   
     7         <artifactId>spring-context</artifactId>
     8          <!-- 版本信息 -->   
     9         <version>5.1.3.RELEASE</version>    
    10     </dependency> 
    11 </dependencies>
    

     

依赖范围

  • 依赖范围<scope> 用来控制依赖和编译,测试,运行的classpath的关系
  • compile:编译域
    • 这个是maven中scope的默认值,可以缺省
    • compile标识被依赖项目需要同当前项目编译时一起进行编译
    • 项目测试期以及版本项目运行时期同样生效
    • 打包的时候需要包含进去
  • test:测试域
    • 表示被依赖的项目仅在项目进行测试的时候生效
    • 一般单元测试(junit)等依赖包配置为test
    • 项目运行时不会生效
  • provided:提供域
    • provided意味着打包的时候可以不用打包进去,别的容器会提供
    • 比如servlet-api,jsp-api,tomcat这些容器会提供
    • 所以打包,运行时无需提供
  • runtime:运行域
    • 表示被依赖项目不会参与项目的编译
    • 但项目的测试期和运行试期会参与,比如jdbc
    • 与compile相比,跳过了编译这个环节
  • system:系统域
    • 自定义构件,指定systemPath
    • 根provided相似,在系统中要以外部JAR包的形式提供
    • maven不会在repository查找它
  • import:导入
    • 只使用在<dependencyManagement>标签
    • 表示从其它pom中导入dependency的配置
依赖范围 说明 编译是否有效 测试是否有效 运行是否有效 是否打包 实际应用
compile 编译范围 ssm
test 测试范围 × × junit
provided 容器范围 × × servlet-api
runtime 运行范围 × jdbc驱动
posted @ 2019-06-20 15:37  羊羊羊、  阅读(95)  评论(0编辑  收藏  举报