Maven知识点笔记

目录

什么是maven

概念模型

maven安装目录

maven约定的目录结构

maven坐标

依赖管理

仓库管理

生命周期

Maven插件

继承

聚合

私服

什么是maven

Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。

Maven是Apache下的一个开源项目,它是一个项目管理工具,它用于对java项目进行项目构建、依赖管理及项目信息管理

概念模型

maven包含了一个项目对象模型(Project Object Mobel)、

一组标准集合

一个项目生命周期(Project Lifecycle)、

一个依赖管理系统(Dependency Management System)

以及用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

在这里插入图片描述

项目对象模型pom (Project Object Model)

其是 Maven 工程的基本工作单元,是一个XML文件,通过pom.xml定义项目的坐标、项目依赖、项目信息、插件目标等。

依赖管理系统(Dependency Management System)

通过定义项目所依赖组件的坐标由maven进行依赖管理。(在pom.xml中配置)

项目生命周期(Project Lifecycle)

img

阶段处理描述
验证 validate验证项目验证项目是否正确且所有必须信息是可用的
编译 compile执行编译源代码编译在此阶段完成
测试 Test测试使用适当的单元测试框架(例如JUnit)运行测试。
包装 package打包创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify检查对集成测试的结果进行检查,以保证质量达标
安装 install安装安装打包的项目到本地仓库,以供其他项目使用
部署 deploy部署拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

一组标椎集合

比如,标椎的目录结构,标椎的生命周期,依赖管理有标准的坐标定义等。

插件目标

maven整个生命周期过程都是基于插件完成的。

eg

理想的项目构建:高度自动化,跨平台,可重用的组件,标准化的

什么是依赖?为什么要进行依赖管理:自动下载,统一依赖管理

项目信息:项目名称描述等,开发人员信息,开发者信息等

maven安装目录

  • bin目录 含有mvn运行的脚本

    mvn.bat (以run方式运行项目)、 mvnDebug.bat(以debug方式运行项目 )

  • boot目录 含有maven运行需要类加载器

  • conf目录 settings.xml 整个maven工具核心配置文件

  • lib目录 maven运行依赖jar包

maven约定的目录结构

src/main/java —— 存放项目的.java文件

src/main/resources ——存放项目资源文件

src/test/java ——存放所有测试.java文件

src/test/resources ——测试资源文件

target —— 项目输出位置

pom.xml

maven坐标

Maven为什么使用坐标?

Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范,拥有了统一规范,就可以把查找工作交给机器

坐标含义

groupId定义当前Maven项目隶属项目
artifactId定义实际项目中的一个模块
version定义当前项目的当前版本
packaging定义该项目的打包方式
classifier帮助定义构建输出

前四个标识决定了Maven 的唯一性

依赖管理

依赖范围(scope)描述对于主代码classpath有效对于测试代码classpath有效被打包,对于运行时classpath有效例子
compile默认编译依赖范围log4j
test测试依赖范围--junit
provided已提供依赖范围-servlet-api
runtime运行时提供--JDBC

传递性依赖和可选依赖

a.路径最近者优先

b.路径相同,第一声明者优先

仓库管理

何为Maven仓库?

用来统一存储所有Maven共享构建的位置就是仓库

仓库分类

本地仓库

默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/repository/ 的仓库目录。

Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
      <localRepository>C:/MyLocalRepository</localRepository>
</settings

远程仓库

中央仓库:Maven默认的远程仓库

http://repo1.maven.org/maven2

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

私服类似于缓存,减轻带宽

镜像:用来替代中央仓库,速度一般比中央仓库快

生命周期

何为生命周期?

Maven生命周期就是为了对所有的构建过程进行抽象和统一

包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

三个标准的生命周期:

  • clean:项目清理的处理

    • pre-clean:执行一些需要在clean之前完成的工作

    • clean:移除所有上一次构建生成的文件

    • post-clean:执行一些需要在clean之后立刻完成的工作

  • default(或 build):项目部署的处理(构建项目的)

    validate(校验)校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
    initialize(初始化)初始化构建状态,比如设置属性值。
    compile(编译)编译项目的源代码。
    test-compile(编译测试源码)编译测试源代码到测试目标目录.
    test(测试)使用合适的单元测试框架运行测试(Juint是其中之一)。
    package(打包)将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
    verify (验证)运行任意的检查来验证项目包有效且达到质量标准。
    install(安装)安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
    deploy(部署)将最终的项目包复制到远程仓库中与其他开发者和项目共享。
  • site:项目站点文档创建的处理(生成项目站点的)

    • pre-site:执行一些需要在生成站点文档之前完成的工作

    • site:生成项目的站点文档

    • post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

    • site-deploy:将生成的站点文档部署到特定的服务器上

Maven插件

compile 的具体操作是由 maven-compile-plugin 来实现的。

mvn compile或者全写 mvn compiler :compile

所以说 Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。

继承

继承目的

为了消除重复,把相同的配置提取出来

步骤

  1. 父项目的打包方式修改为 pom

<groupId>com.ictpaas</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
  1. 父项目使用 dependencyManagement 标签来管理, 表示子项目默认不继承,

    dependencies定义的依赖,子项目可继承

  1. 子项目配置父项目

<parent>
        <!-- 父项目坐标 -->
        <artifactId>parent</artifactId>
        <groupId>com.ictpaas</groupId>
        <version>1.0-SNAPSHOT</version>
        <!-- 父项目 pom 文件路径-->
        <relativePath>../parent/pom.xml</relativePath>
    </parent>
  1. 子项目依赖配置

<dependencies>
        <!-- 不需要版本, 会从父项目继承, 如果指定版本就是代表不是来自父 pom 而是子 pom 自己的. -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
    </dependencies>
  1. 子项目不仅仅继承依赖, url, name, modeVersion等也能继承, 换句话说子 pom 文件内容看起来很简洁,便于管理

聚合

在这里插入图片描述

聚合的主要作用

一次构建多个项目模块

私服

Nexus内置仓库说明:

  1. Maven Central:该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件。

  2. Releases:这是一种策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件。

  3. Snapshots:这是一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件

  4. 3rd party:这是一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件。

  5. Public Repositories:该仓库组将上述所有策略为Release的仓库,聚合并通过一致的地址提供服务。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值