Maven系统学习
1、
1.1 何为构建?
编译、测试、运行、打包、部署等工作;
Maven就是用软件的办法让这一系列工作自动化,只需要一条简单的命令,所有繁琐的工作就会自动完成;
Maven最大的消除了构建的重复,抽象了生命周期,标准化了构建过程;
1.2 Maven不仅仅是构建工具、还是依赖管理工具、项目信息管理工具;
Maven为全世界的Java开发者提供了一个免费的中央仓库;
1.3 Maven的安装与配置
1.1 环境变量中新建变量:maven_home Maven的安装目录
1.2 环境变量配置path:
当我们在cmd中输入命令时,
window首先会在当前目录寻找可执行的文件或脚本;
如果没有找到,Windows接着遍历环境变量path中定义的路径;
由于将%maven_home%\bin添加到了path中,而%maven_home%实际是引用了前面定义的另一个变量,其值是Maven的安装目录;
Windows会在执行命令时搜索目录maven\bin 下的执行脚本;
1.3 安装目录分析
bin:
包含了mvn运行的脚本
boot:
只包含了一个文件***.jar,是一个类加载器框架,相对于默认的java类加载框架,提供了更丰富的语法,Maven使用该框架加载自己的类库;
conf:
其中的settings.xml文件可以全局的定制Maven的行为;
maven目录/conf/settings.xml:全局范围;
~/.m2/settings.xml:用户范围;
lib:
该目录包含了Maven运行时所有用到的java类库;
2、Maven基本使用
1.1 pom.xml
Maven项目的核心是pom.xml;
定义了项目的基本信息,用于描述项目如何构建、声明依赖。。。;
pom.xml中没有任何的java代码,体现了Maven的一大有点:让项目对象模型最大程度与实际代码相独立(解耦);
1.2 项目主代码(src/main/java)
会被打包到最终的构件(jar)中;
项目测试代码(src/test/java)
只在运行测试时用到,不会被打包;
mvn clean:
告诉Maven清理删除输出目录target/;
默认情况下,Maven构建的所有输出都在target、目录中;
mvn compile:
告诉maven编译src/main/java下的代码;
默认情况下,maven将主代码编译至target/classes目录中;
mvn package:
将项目主代码打包成一个jar或者别的包的文件,该文件位于target/目录下;
mvn install:
将打包好的项目安装到本地仓库后,其他的Maven项目才能使用打包的项目;
3、Maven的坐标
1.1 世界上的任何一个构件都可以使用Maven坐标来唯一标识;
1.2 groupId: Maven项目的名称
artifactId: maven项目模块
version: maven项目的版本
packaging: maven 项目的打包方式
1.3 <dependency>
<groupId..
<artifactId..
<version..
<type></type> 依赖的类型,默认为jar,对应于项目定义的packaging
<scope></scope> 依赖的范围:compile,test,provided,runtime,system,import
<optional></optional> 标记依赖是否可选
<exclusions></exclusions> 排除传递性依赖
</dependency>
4、Maven仓库
1.1 本地仓库、远程仓库(私服[局域网内的]、中央仓库[国外的])
1.2 镜像:
如果仓库A可以提供仓库B存储的所有内容,那么可以认为A是B的一个镜像;
5、Maven的聚合
1.1 把项目的各个模块聚合在一起构建
<modules></modules> 实现聚合的最核心的配置,一般位于项目目录的最顶层
6、Maven的继承
1.1 帮助抽取各模块相同的依赖和插件等配置
<parent> 父模块
<groupId..
<artifactId...
<version...
<relativePath></relativePath> 当项目构建时,Maven首先根据relativePath寻找父POM,如果找到父POM,就不需要去本地仓库找;
如果找不到,再去本地仓库查找;
<parent>
聚合和继承的关系:
聚合POM、继承关系的父POM的packaging都必须是POM
7、Maven的依赖管理
1.1 <dependencies></dependencies>
该元素说明 依赖会被继承
1.2 <dependencyManagement></dependencyManagement>
该元素 既能让子模块继承到父模块的依赖配置,又可保证子模块依赖使用的灵活性;
在dependencyManagement元素下声明的依赖不会引入实际的依赖,但能够约束dependencies元素下的依赖使用;
8、Maven的插件管理
1.1 <pluginManagement></pluginManagement> ???暂搁置
9、Maven的灵活构建
一个优秀的构建系统必须足够灵活,让项目在不同的环境下都能成功构建:
如:开发、测试、生产环境下数据库的不同配置;
maven为了支持构建的灵活性,内置了三大特性:
1、Maven属性:
1.1 内置属性:
${basedir} 项目根目录
${version} 项目版本
1.2 POM属性:
用户可以使用该类(project)属性引用pom文件中对应的元素的值;
1.3 自定义属性:
1.4 Settings属性:
与pom属性类似;
使用以settings.开头的属性 将会 引用 settings.xml文件中的元素的值;eg:${settings.localRepository}
1.5 java系统属性:
所有的java系统属性都可以使用Maven属性引用:
eg:${user.home}指向用户目录
1.6 环境变量的属性:
所有的环境变量都可以使用以env.开头的Maven属性引用:
eg:${env.JAVA_HOME}指向java的环境变量;
1.7 Maven属性只有在pom.xml中才会被解析,放到资源文件中是不会自动解析的,因此需要让Maven解析资源文件中的Maven属性:
资源文件的处理是由maven-resources-plugin做的事情
默认的行为:将项目主资源源文件复制到主代码编译输出的目录中,将测试资源文件复制到财务室代码编译输出目录中
【如何让Maven解析资源文件中的Maven属性???(开启资源过滤)】

使用命令行激活profile:mvn clean install -Pdev -P:在命令行激活一个profile
2、profile
1.1 profile的激活方式:
a, 命令行激活:多个profile之间以逗号分隔
mvn clean install -Pdev
b, settings.xml显式激活:

c, 系统属性激活:

d, 操作系统属性激活:


e, 文件存在与否激活:

f, 默认激活:

1.2 profile的种类:
pom.xml 只对当前项目有效
用户settings.xml 对该用户所有的Maven项目有效
全局settings.xml conf目录下的,对本机上所有的Maven项目均有效
3、Web资源过滤
在web项目中,资源文件位于src/main/resources/目录下;
web项目中还有一种静态资源,eg:css,js...
Maven系统学习的更多相关文章
- 天天都在用Git,那么你系统学习过吗?(一)学习过程
你系统学习Git了吗? 使用Mac编程的好处,不是因为Mac长得好看 Git内容学习准备 如果你还没有用Git,就不要写代码了. GitHub仓库的使用. 新员工入职的时候,会让他先用一周的时间去学习 ...
- maven基础学习-为什么要用maven,帮助解决了什么问题,怎么解决的,希望以后学习每个知识点都可以这样问下自己
maven基础学习 第1章 Maven介绍 1.1 什么是Maven 1.1.1 什么是Maven Maven 的正确发音是[ˈmevən],而不是"马瘟"以及其他什么瘟.Mave ...
- GIT学习——天天都在用Git,那么你系统学习过吗?(学习过程)
你系统学习Git了吗? 学习圣思园张龙老师的Git课程. 使用Mac编程的好处,不是因为Mac长得好看 Git内容学习准备 如果你还没有用Git,就不要写代码了. GitHub仓库的使用. 新员工入职 ...
- 零基础如何系统学习Java Web
零基础如何系统学习Java Web? 我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...
- Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...
- MES系统学习
MES系统是当今制造型企业信息化的热点,而统一建模语言UML是面向对象建模的标准语言,在软件工程发挥着重要作用.MES系统如何进行UML建模呢,今天和大家重点讨论一下MES系统的UML建模方法,请看本 ...
- 001 今天开始系统学习C#
2016-01-16 之前只是大概了解过c#语言,感觉掌握不牢靠.现在开始系统学习C#.现以该博客作为学习笔记,方便后续查看.C# 目标:系统掌握c#知识 时间:30天 范围:C#基础,Winform ...
- Maven之 学习资料
整理maven的学习资料,长期更新. 一.视频 1.孔浩老师的 maven视频教程 二.博客 1.黄勇: maven那些事儿 使用 OSC Maven 仓库 三.书籍 1.<Maven ...
- Linux系统学习笔记:文件I/O
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...
随机推荐
- ADB常用命令简洁版整理
ADB全称Android Debug Bridge ,“安卓调试桥梁”连接Android和电脑通信的桥梁. 市面上常见的手机助手,底层调研的都是ADB命令行. C/S架构命令行工具,客户端和服务端都 ...
- Claims Based Authentication and Token Based Authentication和WIF
基于声明的认证方式,其最大特性是可传递(一方面是由授信的Issuer,即claims持有方,发送到你的应用上,注意信任是单向的.例如QQ集成登录,登录成功后,QQ会向你的应用发送claims.另一方面 ...
- [Lua快速了解一下]Lua运行
-Lua的Hello World print("Hello World") 分号可选 -类似python,进入Lua后再shell中打命令执行语句也可 > print(&qu ...
- Oracle Cannot Update TOP N Issue, 请专家解答
大家好 上周写了匿名方法一文,很多读者,很高兴,相信我们已经从大伙的回复中,对.NET又有了更深刻的认识. 好,现在说主题,各类数据库都有相应更新本表top n的方案.现在我一一举例 首先看表结构如下 ...
- windows phone之山寨win8圆形进度条
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...
- SOA-WebService
一.创建Web服务方法 在项目上右击选择新建项>>Web服务(ASMX),并命名,如MyWebService.asmx 二.注意事项 所有需要外界调用的方法上端均需增加特性[WebMeth ...
- 加密模块(md5)
一.md5加密 import hashlib s = ' print(s.encode()) m = hashlib.md5(s.encode())# 必须得传一个bytes类型的 print(m.h ...
- loj #6046. 「雅礼集训 2017 Day8」爷
#6046. 「雅礼集训 2017 Day8」爷 题目描述 如果你对山口丁和 G&P 没有兴趣,可以无视题目背景,因为你估计看不懂 …… 在第 63 回战车道全国高中生大赛中,军神西住美穗带领 ...
- loj #2255. 「SNOI2017」炸弹
#2255. 「SNOI2017」炸弹 题目描述 在一条直线上有 NNN 个炸弹,每个炸弹的坐标是 XiX_iXi,爆炸半径是 RiR_iRi,当一个炸弹爆炸时,如果另一个炸弹所在位置 X ...
- Xamarin Forms:小马过河,王者归来
因为我媳妇的原因,去年下半年从零开始学习Android原生开发,做了一个答题库app.整体给我的感觉是入门难度不大,前期折腾一番,大部分时间都是花在开发上面,其实任何一门语言都是如此. 今年我又有另一 ...