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并 ...
随机推荐
- JPA注解解析
最近学习hibernate注解形式配置POJO类,将注解的解析记下来,以备以后使用. 例1. @Entity@Table(name="user") public class Fl ...
- (字符串)ZigZag Conversion
[解析] 第一次看到这个题目的人,可能不知道ZigZag是什么意思,简单解释一下,就是把字符串原顺序012345……按下图所示排列: 发现所有行的重复周期都是 2 * nRows - 2 对于首行和末 ...
- C# -- 泛型(2)
通过前面的文章我们知道“泛型”是个“形容词”,并且了解了 “泛型类” 和 “泛型数组” ,下面我们来看看泛型的其它的使用方式. 上一篇:C# -- 泛型(1) <1>.泛型方法 上一篇文章 ...
- react-native-echarts构建的图表出现滚动条并且可以滑动的问题
前段时间做echarts饼状图,按照官方提供的写法完成以后图表可以出来,但是虚拟机上演示出现了滚动条,并且拖动时就会出现空白,双击会缩小像这样 参考GitHub上给出的方法修改成功: no ...
- HTML5 Canvas核心技术图形动画与游戏开发 ((美)David Geary) 中文PDF扫描版
<html5 canvas核心技术:图形.动画与游戏开发>是html5 canvas领域的标杆之作,也是迄今为止该领域内容最为全面和深入的著作之一,是公认的权威经典.amazon五星级超级 ...
- .NET&C#的异常处理
应用程序未捕获异常的处理 处理未捕获的异常是每个应用程序起码有的功能 无论是Windows窗体程序还是WPF程序,我们都看到捕获的异常当中分为"窗体线程异常"和"非窗体线 ...
- 仓储(Repository)和工作单元模式(UnitOfWork)
仓储和工作单元模式 仓储模式 为什么要用仓储模式 通常不建议在业务逻辑层直接访问数据库.因为这样可能会导致如下结果: 重复的代码 编程错误的可能性更高 业务数据的弱类型 更难集中处理数据,比如缓存 无 ...
- 独立线程监控配置文件是否变更,适用于更新了配置文件,不需要重启tomcat服务
直接贴出来代码: package cn.leadeon.utils.file; import java.io.File; import java.io.FileInputStream; import ...
- 编码原则实例------c++程序设计原理与实践(进阶篇)
编码原则: 一般原则 预处理原则 命名和布局原则 类原则 函数和表达式原则 硬实时原则 关键系统原则 (硬实时原则.关键系统原则仅用于硬实时和关键系统程序设计) (严格原则都用一个大写字母R及其编号标 ...
- 【03】循序渐进学 docker:基础命令
写在前面的话 之前谈了啥是 docker 和怎么安装 docker,这里就谈谈 docker 命令的使用,当然,这里的使用可能只是局限于 docker 的增删查改. 另外需要注意的是,为了图片的美观, ...