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并 ...
随机推荐
- MVC全局用户验证之HttpModule
在请求进入到MVC的处理mcvHandler之前,请求先到达HttpModule,因此可以利用HttpModule做全局的用户验证. HttpModule MVC5之前的版本基于system.web. ...
- Codeforces 12D Ball(线段树)
N ladies attend the ball in the King's palace. Every lady can be described with three values: beauty ...
- 使用Jenkins远程部署war包到tomcat container
Jenkins首先使用maven将源代码进行编译打包,之后需要将war包传送到tomcat服务器上进行部署. 来看一下Jenkins的基本配置,首先需要安装插件"Deploy to cont ...
- Sharepoint2013搜索学习笔记之自定义结果显示模板(九)
搜索结果通过套用定义好的显示模板来展示结果,显示模板由js和html组成,我们可以通过修改显示模板,然后将修改好的显示模板跟搜索结果绑定起来,来修改搜索结果的显示效果,例子如下图: 修改前 修改后 第 ...
- C#中的枚举使用
基本用法 默认从0开始分配各个枚举值对应的数字值 public enum VariableType { Type1, Type2 } 指定各个枚举值对应的数字值 public enum Variabl ...
- Android TV 开发 (1)
本文来自网易云社区 作者:孙有军 前言 这里主要记录几个TV问题的解决方案,如果对这个不感兴趣的其实就不用往下看了. 这几天有一个需求就是要求出一个TV版本的app,之前没有具体的了解Tv版的app有 ...
- 一、SpringBoot是什么?
SpringBoot是什么? 我管她是什么,好用就行了啊!!!但是无奈我的简历上写了“精通SpringBoot”...那总得大体说得上SpringBoot是个啥东西吧! Spring相信大家都用过,那 ...
- 小规模kvm宿主机管理-webvirtmgr安装
1.前言WebVirtMgr是近两年来发展较快,比较活跃,非常清新的一个KVM管理平台,提供对宿主机和虚机的统一管理,它有别于kvm自带的图形管理工具(virtual machine manager) ...
- MultiDataTrigger
MultiDataTrigger是多条件数据触发器 和MltiTrigger是同样的,只不过前者是数据,后者是属性. 这个是基本的使用语法 <MultiDataTrigger> <M ...
- Python数据聚合和分组运算(1)-GroupBy Mechanics
前言 Python的pandas包提供的数据聚合与分组运算功能很强大,也很灵活.<Python for Data Analysis>这本书第9章详细的介绍了这方面的用法,但是有些细节不常用 ...