Maven的相关知识及使用
一、简介
maven:
是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的,Maven是跨平台的项目管理工具。
1.自动化构建和项目管理工具
Ant→Make→Maven→Gradle
2.Maven概述
①读音:妹文、麦文
②Maven作用一:自动化构建
③Maven作用二:依赖管理[多了重复、少了报错]
④Maven作用三:项目信息管理
3.自动化构建
①构建[build]:将程序员编写的代码从源文件到服务器部署的整个过程。
清理→编译→测试→报告→打包→部署→运行……
②自动化构建:将构建过程中的各个操作步骤交给构建工具自动完成。
4.Maven的好处?
节省空间
就是对jar包的统一管理就是对jar包的统一管理,依赖管理
一键构建,
可跨平台
5.Maven的用途
①项目构建:项目构建指的是程序模块从清理、编译直到部署的整个过程。
②依赖管理:Maven能够提供自动的依赖管理,将所需要的JAR自动导入到工程中,根据既定的规则很好的解决JAR包之间的冲突。
③项目信息管理:Maven能够提供高质量的项目信息,包括依赖关系、测试报告、站点信息等详细内容,并自动生成静态页面,拷贝到服务器上就可以直接使用。
二、Maven的配置
①要求当前系统环境下配置了JAVA_HOME
在CMD命令行中输入:echo %JAVA_HOME% 如果能出来JDK的安装目录,说明我们配置了JAVA环境
②将Maven的ZIP压缩包解压到一个非中文无空格目录下【maven.apache.org官方网站下载jar包】
apache-maven-3.3.9-bin.zip
③.配置环境变量,用mvn -v查看是否正确配置了maven【要配置jdk, maven3.3.9这个版本所需的jdk版本必须要1.7以上】
M2_HOME:
D:\DevSoft\apache-maven-3.3.9
path:
%M2_HOME%\bin;
mvn -v查看maven版本
④.先了解一下maven的目录结构:
projectname
-src
-main
-java
-package
-resources【配置文件或者说资源文件】
-test
-java
-package
-resources
pom.xml
按照上面的maven的目录结构创建一个maven项目,参照word文档!
⑤当针对某个Maven工程执行诸如“编译”、“测试”、“打包”、“部署”等命令时,需要进入到pom.xml所在的目录下执行。
mvn compile
三、maven的几个概念:
1.坐标
①数学坐标:平面中使用横纵两个坐标系可以唯一的定位平面中的任何一个点。
向量x:横坐标
向量y:纵坐标
②使用三个向量在Maven仓库中唯一的定位一个Maven工程。
向量groupid:公司或组织的名称+项目名称
向量artifactId:模块名称
向量version:模块版本
<groupId>com.neuedu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
③如何根据坐标zhao到仓库中查找对应的Maven工程
坐标
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
仓库中的路径
org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar
④如何查找指定jar包的坐标:
1.从maven仓库下载
http://search.maven.org/
http://mvnrepository.com/【建议使用这个】
四、仓库
①作用:保存Maven工程
②分类
[1]本地仓库:为当前电脑上所有Maven工程服务【本地仓库的配置只需要修改settings.xml文件就可以】
[2]远程仓库[私服]:为当前局域网中的所有Maven工程服务器,公司维护
[3]中央仓库:为全世界所有的Maven工程服务
[4]中央仓库的镜像:内容和中央仓库一样,架设在全世界各个大洲,让Maven用户可以就近获取需要的Maven资源,同时也能够减轻中央仓库的压力。
③jar包的查找过程
首先在本地仓库中查找,如果找不到就到局域网中的私服中去找,还找不到就连接中央仓库或镜像。从中央仓库或镜像中找到后,如果局域网中架设了私服,就保存到私服上,
下次同一局域网中的其他用户直接从私服上下载即可,不必连接中央仓库或镜像了。如果局域网中没有架设私服,则保存在本地仓库中。
④Maven工程分类
[1]Maven用户自己开发的工程
[2]Maven的插件
[3]使用Maven构建得到的第三方jar包
⑤可以修改Maven默认的本地仓库路径,使其指向一个提前下载好的目录
配置文件路径
Maven解压目录/conf/settings.xml
修改
<localRepository>D:\Maven\Repository</localRepository>
五、生命周期
clean 删除target目录
compile 编译
test 测试,先执行compile,再执行test
package 打包(并将jar包放入到target的目录中),先执行compile,然后执行test,最后执行package
install 安装jar包到本地仓库中
mvn deploy
site 生成一个站点,先执行compile,然后执行test,然后执行package,最后执行site
①Maven为了能够将构建过程自动化处理,定义了三个主要的生命周期。其中定义了相关的构建过程。
②三个生命周期
[1]清理周期clean
[2]站点周期site
[3]默认周期default
③最重要的特点:每个生命周期中执行任何一个操作,都是从这个生命周期最初的位置开始执行,直到到达命令指定的位。
六、依赖管理
1、使用坐标引用依赖的项目
依赖声明主要包含如下元素:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
2、依赖方式
[1]在pom.xml配置文件中使用dependencies/dependency元素配置依赖信息
[2]通过目标jar包的坐标找到被依赖的文件
3、依赖范围
在依赖声明中,scope标签指定的就是当前项目在什么情况下对目标项目有依赖。可选值包括:compile、test、provided、runtime等
1.默认compile:当前所依赖的jar包是当前Maven工程中所有类都需要使用的,最终也需要参与打包。
2.test:只是当前工程中的测试类需要,最终不参与打包。
3.provided:当工程在服务器上运行起来后,可以由服务器提供,所以也只是在开发或测试时使用,部署到服务器上时就不需要。
一个自己开发的Maven工程,需要执行“安装”命令,才能够被放入到仓库中。
4、依赖复杂性
[1]路径最短者优先
MakeFriends --------> HelloFriends----------->Hello
| |
log4j.2.1.14 log4j.2.1.17
[2]路径相同时,先声明者优先
MakeFriends --------> HelloFriends ------>log4j.2.1.14
|
-------------->OurFriends ------->log4j.2.1.12
5、版本冲突的解决方案
[1]调节原则:
[1]路径最短者优先原则
[2]路径相同时,先声明者优先原则
[2]排除原则
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
<!--这里不需要指定版本号 -->
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>
[3]版本锁定原则
<dependencyManagement>
<dependencies>
<dependency>
<!--jar包坐标 -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</dependencyManagement>
版本锁定之后,后面再使用到这个的 依赖的时候,就不要写版本号了!
而且如果有多个相同的需要锁定的jar包的版本号一致的话,我们可以单独提取到properties标签中,
在properties标签中,子标签自己定义,标签的值就是版本号,下面只需要在依赖的地方用${}引用就可以了!
七、继承
①目的一:将pom.xml文件中重复的信息统一提取到父工程中,简化pom.xml中的配置
②目的二:将各个子工程都需要依赖的jar包提取到父工程中统一管理
③注意:父工程打包的方式——pom,表示这是一个管理其他工程的工程
< packaging>pom</ packaging>
④指定当前工程的父工程
<parent >
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 如何通过当前工程的pom.xml文件找到父工程的pom.xml文件 -->
<!-- 配置父工程的pom.xml文件相对于当前工程pom.xml文件的相对路径 -->
<relativePath> ../Parent/pom.xml</relativePath >
</parent >
在tomcat运行一遍,用插件运行一遍
解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.
1.添加M2_HOME的环境变量
2.Preference->Java->Installed JREs->Edit 选择一个jdk,
添加 -Dmaven.multiModuleProjectDirectory=$M2_HOME
继承练习:
①新建Maven项目Parent
②修改Parent/pom.xml的<packaging>jar</packaging>为<packaging>pom</packaging>,表明这不是一个普通的Java工程或Web工程,而是管理其他Maven工程的工程。
③删除子项目中的重复内容,提取依赖信息
④在子项目POM中,添加
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<relativePath>从当前目录到父项目的pom.xml文件的相对路径</relativePath>
</parent>
注意:此时如果安装某个项目报错,则是因为Parent工程没有安装
⑤发现子项目中依赖的包和项目有问题
⑥将Parent项目中的dependencies标签,用dependencyManagement标签括起来
⑦在子项目中重新指定需要的依赖,删除范围和版本号
Maven的相关知识及使用的更多相关文章
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- 移动WEB像素相关知识
了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...
- listener监听器的相关知识
从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...
- UIViewController相关知识
title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...
- 【转】java NIO 相关知识
原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...
- NSString使用stringWithFormat拼接的相关知识
NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...
- iOS网络相关知识总结
iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...
- 电路相关知识--读<<继电器是如何成为CPU的>>
电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...
- 地址标记,SpringMVC转发与调用相关知识存档
1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...
随机推荐
- Selenium-鼠标操作
有些特殊的系统可能需要模拟键盘或者鼠标的操作才可以 鼠标的操作不仅仅是click()单击操作,还有很多包含在ActionChains类中 context_click(elem) 右击鼠标点击元素ele ...
- Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
使用hibernate的时候,报出这个错误Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvir ...
- freeMarker(十四)——XML处理指南之必要的XML处理
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.基本内容 假设程序员在数据模型中放置了一个XML文档,就是名为 d ...
- p2p视频点播系统开发案例――Myseelite
项目地址:http://sourceforge.net/projects/myseelite/ 1. MySee公司倡导的开源项目,目前国内功能最强大的一个开源系统. 2. 一个直播(也支持轮播.点播 ...
- codevs1020 孪生蜘蛛
1020 孪生蜘蛛 题目描述 Description 在G城保卫战中,超级孪生蜘蛛Phantom001和Phantom002作为第三层防卫被派往守护内城南端一带极为隐秘的通道. 根据防护中心的消息 ...
- bzoj 4372 烁烁的游戏 —— 动态点分治+树状数组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 本以为和 bzoj3730 一样,可以直接双倍经验了: 但要注意一下,树状数组不能查询 ...
- bzoj 2039 & 洛谷 P1791 人员雇佣 —— 二元关系最小割
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2039 https://www.luogu.org/problemnew/show/P1791 ...
- ZAB与Paxos算法的联系与区别
ZAB协议并不是Paxos算法的一个典型实现,在讲解ZAB和Paxos之间的区别之前,我们首先来看下两者的联系. 两者都存在一个类似于Leader进程的角色,由其负责协调多个Follow进程的运行. ...
- u-boot向linux内核传递启动参数
U-BOOT 在启动内核时,会向内核传递一些参数.BootLoader 可以通过两种方法传递参数给内核,一种是旧的参数结构方式(parameter_struct),主要是 2.6 之前的内核使用的方式 ...
- Python-RabbitMQ消息队列的发布与订阅
RabbitMQ消息队列的发布与订阅类似于广播,一端发送消息,多个客户端可以同时接收到消息 fanout:所有绑定到exchange的queue都可以接收消息 消息发布端 # -*- coding:u ...