maven的学习之旅

什么是maven

首先,maven不是一个语言,不是一个框架,他是一个项目管理工具。

使用maven对项目进行构建,依赖管理

所以,maven与构建是挂了一个很大的勾勾的,搞清楚maven之前先要搞清楚构建是怎么个构建法的。

构建(build)

maven的出现之前,我们是如何构建我们的项目的?

  1. 创建一个项目
  2. 编写我们的代码
  3. 当我们编写完了之后,java文件会编译输出二进制文件
  4. 执行单元测试
  5. 然后打包部署到服务器
  6. 然后开启服务器
  7. 运行程序

根据上面的步骤,我突然对之前所说的构建有了一个比较清晰的定位了。


为什么会出现maven

所有新事物的出现必定是因为他之前太过麻烦了

这句话能够解释大部分计算机新起事物的理由。

在上面的所描述的构建流程里面,我们很清晰地能感受到一种繁杂迎面而来,都是写过无数项目的真实体验。

我们每次导入一个jar包是多么的痛苦...

我们要手动测试所有的单元测试...

我们要手动打包我们的项目...

我们要手动地将我们的项目部署到服务器上门...

我想起来我之前写项目的时候总是忘记把项目部署到服务器上...

那么maven的作用到底是什么呢?

maven可以帮我们把上面的流程全部做完,并且可以一步做完。


maven的作用是什么

1.maven的构建

maven执行步骤:清理--》编译--〉测试--》报告--〉打包--》部署

maven可以一步帮我们执行完所有,当然我们也可以手控操作这些步骤:

maven的不同步骤都是对应着不同的简单的指令

  • 清理: clean
  • 编译: compile
  • 打包: package
2.maven的导入jar包的操作:解放双手

项目里会有一个文件叫做pom.xml,我们的包的导入都是写在这个文件里面。

与之前不同的是,之前我们是真正事实得在做导入这个一个动作,但是pom文件就类似于一个清单:

我们在清单里面罗列出我们想要的包以及这些包的版本。

最后,当我们mvn install的时候,maven团队会根据我们的pom文件,在他们维护的maven仓库里面下载jar包。我们减少了我们每次手动导入jar包这样一个非常繁琐的过程!

3.maven仓库
  • 本地仓库:我们项目根据pom.xml清单下载下来的项目就是下载到本地仓库里面的;当然并不是一个项目一个本地仓库,而是一个电脑一个本地仓库,所以,当我们第一个项目下载了xx.jar,第二个项目当再次需要xx.jar的时候,就不需要从远程仓库下载了,从本地仓库拿就好了。

这个本地仓库不需要我们自定义,是默认设置的。当我们接触了一段时间的maven,我们一定会发现有这么一个文件夹叫做.m2,这个就是本地仓库。

  • 远程仓库:互联网仓库,可以是在互联网内也可以是在局域网内。

  • 中央仓库:服务于整个互联网,有maven团队自己维护,里面有非常多的jar包。


maven命令

mvn clean:清理,删除target目录里面的内容(生成的 .class 文件)

mvn compile:编译,将java文件编译成.class文件,并且放在target文件夹里面

mvn test:测试,会执行src/test目录下面的单元测试类

mvn package:打包,将java工程打包成jar包,将web工程打包成war包

mvn install:安装,将maven打包好的包发布到本地仓库

mvn deploy:部署,将包复制到远程仓库


maven生命周期

clean生命周期阶段:pre-clean-->clean-->post-clean

default生命周期阶段:compile-->test-->package-->install-->deploy

site生命周期阶段:pre-site-->site-->post-site-->site-deploy

site:生成项目的站点文档

如果我们执行了mvn clean,那么真正执行的其实是pre-clean 和 clean 两个,

同理,如果我们执行了mvn install,那么我们执行的其实是,compile,test,package,install,

总结,执行当前命令并不是只执行当前阶段,而是从最初,执行到当前阶段截止。

但是,如果我们想要执行两个阶段的生命周期呢?比如我们想要执行clean 以及 intall:

mvn clean install 我们如此命名便可。


pom.xml

前面提到了很多次pom.xml,我们知道他是一个jar包的罗列清单。那么这个清单的书写格式我们肯定是必须知道的,因为我们导入jar包现在全靠写pom.xml了。

<dependencies>
    <dependency>
        <groupId>项目名称</groupId>
        <artifactId>模块名称</artifactId>
        <version>版本</version>
        <scrope>依赖范围</scrope>
    </dependency>
</dependencies>

当我们创建一个maven项目的时候,上面的选择也是我们所要定义的。

一般我们会把groupId设置成我们的包名+项目名,grtifactId设成我们的项目名;

<build>
    <plugins>
        <plugin>
            <groupId>com.yq.test</groupId>
            <artifactId>TestMavenProject</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

configuration里面配置的1.8指的是我们的jdk版本是1.8的。

encoding很显而易见是我们的编码。


maven进阶之jar包依赖冲突

1.什么是依赖冲突?

此时,我们有a包和b包,但是a包和b包里面同时依赖了c包(不同版本),此时我们有一个类是c包里面的。

当我们需要运用这个类的时候,系统就懵逼了,我们到底要的是哪一个版本的c包呢?

2.如何调解依赖冲突?
  • 谁先声明谁优先
    在pom文件里面,如果我a包先声明,那么我们就优先取a包里面的c包。

  • 谁近谁优先
    在pom文件里,比如:

a---》xx-1.jar
a---〉b----》xx-2.jar

由上因为xx-1.jar离a包其实最近,所以优先选择xx-1.jar

3.如何避免产生依赖冲突?

锁定版本。xx包,我们只用1版本的,不用2版本的,这样就不会产生依赖冲突了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容

  • 简介 概述 Maven 是一个项目管理和整合工具 Maven 为开发者提供了一套完整的构建生命周期框架 Maven...
    闽越布衣阅读 4,261评论 6 39
  • Maven编译代码的相关命令 第一、main目录下的主代码编写完毕后,使用Maven进行编译,在项目根目录下运行命...
    加油小杜阅读 1,164评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,714评论 6 342
  • 若问读书方法,我想向诸君上一个条陈。这方法是极陈旧的,极笨极麻烦的,然而实在是极必要的。什么方法呢?是抄录或笔记。...
    一朵生涯规划师阅读 2,508评论 3 57