Maven的核心概念

Maven是一款服务于java平台的自动化构建工具。
自动化构建工具还有:make->ant->maven->gradle
 
    1.约定的目录 
 

2.POM Project Object Model pom.xml是核心配置文件,与构建相关的一切都在里面设置

 3.坐标 下面三个向量唯一定位一个Maven工程

  groupId:公司或组织域名倒序+项目名

  artifactId:模块名

  version:版本号

  Maven工程的坐标与仓库中路劲的关系:groupId + artifactId + version + jar名(groupId和artifictId中的点需要替换为斜杠,类似于java中包的写法为     java.lang.String,但实际路劲写法为java/lang/String)

    4.依赖
<dependency>
<groupId>com.study</groupId>
<artifactId>xxx</artifactId>
<scope>compile</scope>
</dependency>
  Maven解析依赖时会到本地仓库去查找依赖的jar包,对于我们自己开发的Maven工程,使用mvn install后就能进入仓库。
  依赖的范围(在scope中设置)
  
  
  
    [1]compiled (默认)
    对主程序是否有效:有效
    对测试程序是否有效:有效
    是否参与打包:参与
    [2]test
    对主程序是否有效:无效
    对测试程序是否有效:有效
    是否参与打包:不参与
    [3]provided
    对主程序是否有效:有效
    对测试程序是否有效:有效
    是否参与打包:不参与
  依赖的特性:
  ①依赖的传递性
    [1]好处:可以传递的依赖不必在每个模块中重复申明,在“最下面”的工程中依赖一次即可
    [2]注意:非compile范围的依赖不能传递。所以在各个模块中,如果有需要就得重复申明依赖。
  ②依赖的排除
    [1]需要设置依赖排除的场合
    
    [2]依赖排除的设置方式(只对配置的工程及后面依赖该工程的生效)
    
  ③依赖的原则
    [1]作用:解决模块工程之间jar包的冲突
    [2]情景设定1:验证最短路径优选原则
    
    [3]情景设定2:验证最短路径相同先声明原则(dependecy标签申明的顺序)
    
  ④统一管理依赖的版本
    [1]情景举例
    
    这里对spring各个jar包的依赖版本都是4.0.0如果想统一升级为4.1.1。
    [2]建议配置方式
      i:使用properties标签内使用自定义标签统一申明版本号      
<properties>
<myVersion>4.1.1<myVersion>
<properties>

      ii:在需要统一版本的位置,使用${自定义标签名}引用申明的版本号

<version>${myVersion}<version>

    [3]其实properties标签配合自定义标签申明数据的配置并不是只能应用于声明依赖的版本号,凡是需要统一声明再引用的场合都可以使用。

    5.仓库
  仓库分类
  [1]本地仓库:为当前电脑上所有的Maven工程服务
  [2]远程仓库
    (1)私服:架设在当前局域网环境下,为当前局域网下所有Maven工程服务
    (2)中央仓库:架设在Internet上,为全世界所有Maven工程服务
    (3)中央仓库镜像:架设在各个大洲,为中央仓库分担流量。提升用户访问速度。
  仓库中保存的内容:Maven工程
    [1]Maven自身所需要的插件
    [2]第三方框架或工具的jar包
    [3]我们自己开发的Maven工程
    6.生命周期/插件/目标
  ①各个构建环节执行的顺序:不能打乱顺序,必须按既定的顺序执行。
  ②Maven的核心程序中定义了抽象的生命周期,生命周期中的各个阶段的具体任务由插件完成。
  ③Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期的各个阶段:不论现在要执行生命周期中的哪个阶段,都是从生命周期最初的位置开始执行。
    7.聚合
  [1]作用:一键安装各个工程。
  [2]配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块
<!--配置聚合-->
<modules>
<!--指定各个子工程的相对路径-->
<module></module>
<module></module>
</modules>
  [3]使用方式:在聚合工程上执行安装
    8.继承
  [1]问题:模块之前版本不一致(由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本的不一致)
  [2]需求:统一管理各个模块工程中对junit依赖的版本
  [3]解决思路:将junit依赖统一提取到“父工程”中,在“子工程”中声明依赖时不指定版本
  [4]操作步骤:
  ①创建一个maven工程作为父工程。注意:打包的方式需为pom
<groupId>org.example</groupId>
<artifactId>mavenStudy</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

  ②在子工程中声明对父工程的引用

<!-- 子工程中声明父工程-->
<parent>
<artifactId></artifactId>
<groupId></groupId>
<version></version>
<!--以当前项目为基准的父工程pom.xml文件的相对路径-->
<relativePath></relativePath>
</parent>

  ③将子工程坐标中与父工程坐标中重复的内容删掉

  ④在父工程中统一junit的依赖 

<!--配置依赖的管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<scope></scope>
</dependency>
</dependencies>
</dependencyManagement>

  ⑤在子工程中删除junit依赖的版本号

  [5]注意:配置继承后,执行安装命令需要先安装父工程。

常用maven命令

执行与构建过程(编译,测试,打包)相关的命令必须进入pom.xml所在位置执行
mvn clean:清理(打包好的程序放在生成的名为target的文件中,清理即删除文件中打包好的程序)
mvn compile:编译主程序
mvn test-compile:编译测试程序
mvn test:执行测试
mvn package:打包
mvn install:安装至本地仓库
mvn site:生成站点
修改默认本地仓库的位置:在conf/settings.xml中修改localRespository标签
 

Maven笔记之核心概念及常用命令的更多相关文章

  1. Linux 笔记:核心思想、常用命令以及脚本语法

    总结于 <鸟哥的 Linux 私房菜 - 基础学习篇> ,图片也来自于此. 核心思想 目录树结构(directory tree) Linux 系统是基于目录树结构的,这是它的核心思想.目录 ...

  2. (一)maven基本配置,概念,常用命令

    ---恢复内容开始--- 首先明白maven是什么, maven是一个自动化构建工具,可以将你一个项目的html,java,css,js等代码构建成一个可发布的产品,相当于就是将你从写完代码到部署完成 ...

  3. composer 基本概念与常用命令总结

    目录 composer 基本概念与常用命令总结 基本概念 软件安装 linux/mac安装 windows 配置镜像 如何使用 常用命令 全局参数 初始化 init 初始化参数 依赖安装 instal ...

  4. Linux的几个概念,常用命令学习

    Linux的几个概念,常用命令学习---------------------------------设备名装载点// 通过装载点访问设备-------------------------------- ...

  5. maven用途、核心概念、用法、常用参数和命令、扩展

    设置问题解决. http://trinea.iteye.com/blog/1290898 本文由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Buil ...

  6. Linux学习笔记(一):常用命令

    经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...

  7. Git 基本概念及常用命令

    一.基本概念 文件的三种状态:(任何一个文件在git中都有以下三种状态) 1) 已提交(committed):表示该文件已经被安全地保存在本地数据库中了. 2) 已修改(modified):表示修改了 ...

  8. Linux学习笔记(一):常用命令(1)

    经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...

  9. Git的概念及常用命令

    一.概念 Git是一个分布式的版本控制工具,区别于集中式管理的SVN. 二.优势 每个开发者都拥有自己的本地版本库,可以在本地任意修改代码.创建分支,不会影响到其他开发者的使用: 所有版本信息均保存在 ...

随机推荐

  1. Mysql数据安全备份

    数据安全备份的意义 在出现意外的时候(硬盘损坏.断点.黑客攻击),以便数据的恢复 导出生产的数据以便研发人员或者测试人员测试学习 高权限的人员那操作失误导致数据丢失,以便恢复 备份类型 完全备份:对整 ...

  2. 讲武德,你们要的高性能日志工具 Log4j2,来了

    Log4j 介绍过了,SLF4J 介绍过了,Logback 也介绍过了,你以为日志系列的文章就到此终结了? 不不不,我告诉你,还有一个 Log4j 2,顾名思义,它就是 Log4j 的升级版,就好像手 ...

  3. Spring Cloud Security OAuth2.0 认证授权系列(一) 基础概念

    世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 前序 最近想搞下基于Spring Cloud的认证授权平台,总体想法是可以对服务间授权,想做一个基于Agent 的无 ...

  4. BUUCTF 不一样的flag writeup

    感谢BUUCTF提供的学习平台 https://buuoj.cn 题目:不一样的flag 工具:x64dbg 这是一道内存的迷宫题,迷宫是402000处的字符串 根据经验,这应该(a行*b列)的字符, ...

  5. java后端开发三年!你还不了解Spring 依赖注入,凭什么给你涨薪

    前言 前两天和一个同学吃饭的时候同学跟我说了一件事,说他公司有个做了两年的人向他提出要涨薪资,他就顺口问了一个问题关于spring依赖注入的,那个要求涨薪的同学居然被问懵了...事后回家想了想这一块确 ...

  6. 思维导图MindManager的过滤主题功能如何使用

    MindManager是一款多功能思维导图工具软件.但有的思维导图繁杂,用户只需要查看自己感兴趣的主题该怎么办呢?接下来,我就为大家详细介绍MindManager思维导图2020版的过滤主题功能,可以 ...

  7. php进阶学习-单例设计模式

    什么是单例模式(singleton)? 在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点. 单例模式的特点 一个类只有一个实例 私有克隆 ...

  8. C# 9.0新特性详解系列之三:模块初始化器

    1 背景动机 关于模块或者程序集初始化工作一直是C#的一个痛点,微软内部外部都有大量的报告反应很多客户一直被这个问题困扰,这还不算没有统计上的客户.那么解决这个问题,还有基于什么样的考虑呢? 在库加载 ...

  9. vue中,模拟锚点定位,实现滚动动画效果

    平时我们利用锚点进行页面内的快速瞬移,画面跳转生硬,观感很差. 在VUE中,如何快速的实现锚点效果,并且还让它拥有滚动的动画效果呢. 其实两行代码就能解决问题 1 <a @click=" ...

  10. Docsify+腾讯云对象存储 COS,一键搭建云上静态博客

    最近一直在想如何利用 COS 简化静态博客的搭建过程.搜了很多的静态博客搭建过程,发现大部分的静态博客都要通过编译才能生成静态页面.功夫不负有心人,终于让我找到了一个超简洁博客的搭建方法. 效果预览 ...