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生命周期包含以下三个部分组成
- Clean LifeCycle:在进行真正的构建之前进行一些清理工作。
- Default LifeCycle:构建的核心部分,编译,测试,打包,安装,部署等等。
- Site LifeCycle:生成项目报告,站点,发布站点。
六、Maven的插件和目标
- 插件:本质上由jar包和配置文件组成
- 目标:每个插件都能实现多个功能,每个功能就是一个插件目标。
七、Maven的仓库【重要】
- 仓库分类
- 本地仓库:为当前计算机提供maven服务
- 远程仓库:为其他计算机也可以提供maven服务
- 私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务。
- 中央仓库:架设在Internet上,为全世界所有Maven工程服务。
- 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
- 仓库中的文件类型【jar包】
- Maven的插件
- 第三方框架或工具的jar包
- 自己研发的项目或模块
八、Maven的坐标【重要】
-
作用:使用坐标引入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可以自动解决jar包之间的依赖问题
十一、Maven统一版本号
语法:
<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会按照依赖顺序自动安装子工程
相关文章
- 深入探讨Java中的异常与错误处理
- 研究学习Kotlin的一些方法
- 数据显示Java热度持续下落,日子屈指可数?
- 2017年5月编程语言排行榜:Java与C语言优势正开始缩小
- Java多线程之内置锁与显示锁
- Java线程池的理论与实践
- 白话阿里巴巴Java开发手册(编程规约)
- 关于Java你不知道的十件事
- Java服务化系统线上应急和技术攻关,你必须掌握的Linux命令
- Java实现高斯模糊和图像的空间卷积
- Java阻塞队列实现原理分析
- NPM使用技巧
- Node.js对Java开发者而言是什么?
- Java反射机制应用实践
- 理解RxJava中的Single和Completable
- 2017年你不能错过的Java类库
- 大规模集群下的Hadoop NameNode
- 从源码解密Spark内存管理
- 2017年3月编程语言排行榜:Swift首次进入前十
- JVM热点技术:Java类的加载机制