Maven使用与学习
Maven使用与学习
一、Maven是什么
maven像是一种管理的工具,实现的原理是使用插件。比如说,一个公司需要做一个项目,这个项目被分成了很多模块,每个模块又分成了许多的业务,这些最后都需要整合到一起。那么就会出现一个很大的问题,在项目开发中每个人使用的jar包版本、软件版本等如果不一样的话,就算单个模块可以执行,一旦整合就会出现各种各样的问题。那么如何避免这些问题或者最大程度上减少这种情况发生呢?那么就要用到maven。它更像是每个开发者从网上的一个中央仓库获取到开发所需要的jar包,并且可以把自己完成的项目打包发布到这个仓库中,供其他开发人员使用,同时项目经理可以统一开发所需要的版本、jar包等,最大程度上减少这种非技术问题的情况发生。
Maven 字面意思:专家、内行
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。
依赖管理:jar之间的依赖关系,jar包管理问题统称为依赖管理
项目构建:项目构建不等同于项目创建
- 项目构建是一个过程【7步骤组成】,项目创建是瞬间完成的
- 清理:mvn clean
- 编译:mvn compile
- 测试:mvn test
- 报告:
- 打包:mvn package
- 安装: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使用与学习相关推荐
- maven,OSGI,karaf 学习笔记
研一时在 opendaylight 控制器上开发过路由插件,当时开发时半懂不懂的,很多东西都没弄清楚.最近为找找工作做准备,准备重新好好学习 opendatlight. opendatlight 源码 ...
- [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作
第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索 ...
- maven 一个简单项目 —— maven权威指南学习笔记(三)
目标: 对构建生命周期 (build lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...
- eclipse maven配置_Gradle学习记录015 声明仓库,检查依赖,管理依赖的配置
本片由三部分组成,第一部分声明仓库的参考链接如下: https://docs.gradle.org/current/userguide/repository_types.html 第二部分检查依赖的依 ...
- maven实战和学习(带视频教程)
详细学习视频见链接 链接:https://pan.baidu.com/s/1aax2e-rfskFyJwXkfTLAEA 提取码:h3e6 Maven 基础课程第一天 第1章 Maven 介绍 1.1 ...
- maven deploy plugin_学习Maven之Maven Surefire Plugin
1.maven-surefire-plugin是个什么鬼? 如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了.maven- ...
- eclipse maven打包_Maven 学习
1 Maven 简介 Maven 使用项目对象模型(POM,Project Object Model) 的概念,可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具 2 Maven 的 ...
- maven nexus myeclipse 学习
http://b-l-east.iteye.com/blog/1246482 这篇文章比较详细的介绍了 nexus 本地仓库以及与maven的配合使用 http://blog.csdn.net/arv ...
- Maven工具的学习内容与介绍<第一课>
第一点 Maven的定义: Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具. ...
最新文章
- Windows Server 2003 asp网页不能访问的常见问题
- python3.8安装xlwings出错_Python xlwings模块简单使用
- Jinja2模板与模板继承
- python 类初始化参数校验_python之类的任意数量参数初始化
- 1-4 多文档界面处理(2)
- Android之提交数据到服务端方法简单封装
- 131. 分割回文串
- live2d java_Live2D的使用
- 华硕win10键盘失灵_华硕笔记本键盘失灵,小编告诉你华硕笔记本键盘失灵怎么解决...
- Servlet的Mapping
- raid硬盘速度测试软件,RAID 0模式下固态硬盘性能测试
- 微信公众平台开发【素材管理】上传临时素材
- mysql执行计划extra_四、MySQL优化之explain执行计划的extra属性
- 计算机中级改进的具体措施,改进职高计算机教学的几点措施
- 诸葛亮司马懿大战房市
- 原生微信小程序实现号码隐藏,用****代替
- JAVA性能调试+JProfiler使用相关
- 斗鱼html5插件不可用,斗鱼html5插件
- 利用python实现将文本、摩尔斯电码与用滴答表示的摩尔斯电码三者相互转换
- SAP接口编程案例 - VBA批量更新销售订单定价类型