Maven使用与学习

一、Maven是什么

  • maven像是一种管理的工具,实现的原理是使用插件。比如说,一个公司需要做一个项目,这个项目被分成了很多模块,每个模块又分成了许多的业务,这些最后都需要整合到一起。那么就会出现一个很大的问题,在项目开发中每个人使用的jar包版本、软件版本等如果不一样的话,就算单个模块可以执行,一旦整合就会出现各种各样的问题。那么如何避免这些问题或者最大程度上减少这种情况发生呢?那么就要用到maven。它更像是每个开发者从网上的一个中央仓库获取到开发所需要的jar包,并且可以把自己完成的项目打包发布到这个仓库中,供其他开发人员使用,同时项目经理可以统一开发所需要的版本、jar包等,最大程度上减少这种非技术问题的情况发生。

  • Maven 字面意思:专家、内行

  • Maven是一款自动化构建工具,专注服务于Java平台的项目构建依赖管理

  • 依赖管理:jar之间的依赖关系,jar包管理问题统称为依赖管理

  • 项目构建:项目构建不等同于项目创建

    • 项目构建是一个过程【7步骤组成】,项目创建是瞬间完成的

      1. 清理:mvn clean
      2. 编译:mvn compile
      3. 测试:mvn test
      4. 报告:
      5. 打包:mvn package
      6. 安装:mvn install
      7. 部署:

二、为什么使用maven

1.获取jar包

  • 使用Maven之前,自行在网络中下载jar包,效率较低。如【谷歌、百度、CSDN....】
  • 使用Maven之后,统一在一个地址下载资源jar包【阿里云镜像服务器等...】

2.添加jar包

  • 使用maven之前,将jar复制到项目文件中,相对浪费存储空间

  • 使用maven之后,jar包统一存储到Maven本地仓库,使用坐标方式把jar包引入到项目中

3.使用maven便于解决jar包冲突及依赖问题

三、Maven的POM

POM:Project Object Model【项目对象模型】,将项目封装为对象模型,便于使用Maven管理【构建】项目

pom.xml:是maven的核心配置文件,一个maven项目有且只有一个

四、Maven的目录结构

  • 项目名

    • src【书写java源代码】

      • main【书写java主程序代码】

        • java【书写java代码】
        • resources【书写配置文件代码】
      • test【书写测试代码】

        • java【书写测试java代码】
      • pom.xml【书写配置文件代码】

      • target【编译后目录结构】

五、Maven的生命周期

Maven生命周期:按照顺序执行各个命令,Maven生命周期包含以下三个部分组成

七、Maven的仓库【重要】

八、Maven的坐标【重要】

  • Clean LifeCycle:在进行真正的构建之前进行一些清理工作。
  • Default LifeCycle:构建的核心部分,编译,测试,打包,安装,部署等等。
  • Site LifeCycle:生成项目报告,站点,发布站点。
  • 六、Maven的插件和目标

  • 插件:本质上由jar包和配置文件组成
  • 目标:每个插件都能实现多个功能,每个功能就是一个插件目标。
  • 仓库分类
    • 本地仓库:为当前计算机提供maven服务
    • 远程仓库:为其他计算机也可以提供maven服务
      • 私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务。
      • 中央仓库:架设在Internet上,为全世界所有Maven工程服务。
      • 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
  • 仓库中的文件类型【jar包】
    • Maven的插件
    • 第三方框架或工具的jar包
    • 自己研发的项目或模块
  • 作用:使用坐标引入jar包

  • 坐标由g-a-v组成

    [1]groupId:公司或组织的域名倒序+当前项目名称

    [2]artifactId:当前项目的模块名称

    [3]version:当前模块的版本

  • 注意

    • g-a-v:本地仓库jar包位置
    • a-v:jar包全名
  • 坐标应用

    • 坐标参考网址:http://mvnrepository.com
    • <dependency><groupId>com.shujia</groupId><artifactId>mysql-demo2</artifactId><version>1.0-SNAPSHOT</version>
      </dependency>

      九、依赖范围

      依赖语法:<scope>

    • compile【默认值】:在main、test、Tomcat【服务器】下均有效。
    • test:只能在test目录下有效
      • junit
    • provided:在main、test下均有效,Tomcat【服务器】无效。
      • servlet-api
    • 十、依赖的传递性

    • 路径最短者优先【就进原则】
    • 十一、Maven统一版本号

      语法:

    • 先声明者优先
    • 注意:Maven可以自动解决jar包之间的依赖问题
      <properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><hadoop-version>2.7.6</hadoop-version></properties><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>${hadoop-version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop-version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>${hadoop-version}</version></dependency></dependencies>
      

      十二、Maven的继承

      第一种方式

  • 在父工程中的pom.xml中导入jar包,在子工程中统一使用。【所有子工程强制引入父工程jar包】

    • 父工程pom.xml依赖
    • <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>${hadoop-version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop-version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>${hadoop-version}</version></dependency></dependencies>

      子过程不写任何依赖,自动引入父工程所有的包

第二种方式

使用 管理父工程的依赖

 <dependencyManagement><dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>${hadoop-version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop-version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>${hadoop-version}</version></dependency>

在子工程引入父工程的相关jar包

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

注意:在子工程中,不能指定版本号

十三、 Maven的聚合

为什么使用Maven的聚合

  • 优势:只要将子工程聚合到父工程中,就可以实现效果:安装或清除父工程时,子工程会进行同步操作。
  • 注意:Maven会按照依赖顺序自动安装子工程

十四、学习教程推荐

Maven从基础到高级应用全套教程分享、Java开发必学_哔哩哔哩_bilibili

Maven使用与学习相关推荐

  1. maven,OSGI,karaf 学习笔记

    研一时在 opendaylight 控制器上开发过路由插件,当时开发时半懂不懂的,很多东西都没弄清楚.最近为找找工作做准备,准备重新好好学习 opendatlight. opendatlight 源码 ...

  2. [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作

    第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索 ...

  3. maven 一个简单项目 —— maven权威指南学习笔记(三)

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

  4. eclipse maven配置_Gradle学习记录015 声明仓库,检查依赖,管理依赖的配置

    本片由三部分组成,第一部分声明仓库的参考链接如下: https://docs.gradle.org/current/userguide/repository_types.html 第二部分检查依赖的依 ...

  5. maven实战和学习(带视频教程)

    详细学习视频见链接 链接:https://pan.baidu.com/s/1aax2e-rfskFyJwXkfTLAEA 提取码:h3e6 Maven 基础课程第一天 第1章 Maven 介绍 1.1 ...

  6. maven deploy plugin_学习Maven之Maven Surefire Plugin

    1.maven-surefire-plugin是个什么鬼? 如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了.maven- ...

  7. eclipse maven打包_Maven 学习

    1 Maven 简介 Maven 使用项目对象模型(POM,Project Object Model) 的概念,可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具 2 Maven 的 ...

  8. maven nexus myeclipse 学习

    http://b-l-east.iteye.com/blog/1246482 这篇文章比较详细的介绍了 nexus 本地仓库以及与maven的配合使用 http://blog.csdn.net/arv ...

  9. Maven工具的学习内容与介绍<第一课>

    第一点 Maven的定义: Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具. ...

最新文章

  1. Windows Server 2003 asp网页不能访问的常见问题
  2. python3.8安装xlwings出错_Python xlwings模块简单使用
  3. Jinja2模板与模板继承
  4. python 类初始化参数校验_python之类的任意数量参数初始化
  5. 1-4 多文档界面处理(2)
  6. Android之提交数据到服务端方法简单封装
  7. 131. 分割回文串
  8. live2d java_Live2D的使用
  9. 华硕win10键盘失灵_华硕笔记本键盘失灵,小编告诉你华硕笔记本键盘失灵怎么解决...
  10. Servlet的Mapping
  11. raid硬盘速度测试软件,RAID 0模式下固态硬盘性能测试
  12. 微信公众平台开发【素材管理】上传临时素材
  13. mysql执行计划extra_四、MySQL优化之explain执行计划的extra属性
  14. 计算机中级改进的具体措施,改进职高计算机教学的几点措施
  15. 诸葛亮司马懿大战房市
  16. 原生微信小程序实现号码隐藏,用****代替
  17. JAVA性能调试+JProfiler使用相关
  18. 斗鱼html5插件不可用,斗鱼html5插件
  19. 利用python实现将文本、摩尔斯电码与用滴答表示的摩尔斯电码三者相互转换
  20. SAP接口编程案例 - VBA批量更新销售订单定价类型

热门文章

  1. WIFI无线传输,图传。视频提节
  2. Python hasattr()笔记(可执行文件路径获取)
  3. svn无法checkout问题
  4. GPS卫星计时周期清零,GPS周期翻转,GPS周期清零
  5. PLC滑动平均值滤波(SMART 200梯形图篇)
  6. Vue之 解决下拉框默认选中的是数字key 不是汉字value值
  7. Unity数据持久化-Json
  8. iphon13是双卡双待吗 苹果13是5g吗
  9. 织梦CMS如何搬家并成功连接数据库
  10. arachni安装与使用