Maven详解

Maven用了半年多了,现在基本的使用已经可以了,在这里进行一个总结,加深印象,同时帮助小白快速上手Maven

一、什么是Maven?
Maven是一个项目构建工具,能把项目抽象成一个POM(project object model),使用POM文件对项目进行构建、打包、文档化等操作。最重要的是解决了项目依赖的问题,简化项目环境搭建的过程;

二、为什么用Maven?
Maven最核心的功能:解决复杂项目依赖的问题。怎么说?比如说你在项目中需要用到第三方jar包(如Mysql驱动),去哪找呢。如果一个还好,到一个复杂的项目通常由几十甚至上百个依赖组成,一个一个找怕不是累死?而Maven就解决了这个问题,比如Mysql驱动,只需要加入下面这一句即可:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>

是不是很方便?

另一方面,项目的测试、打包、部署等操作,Maven也进行了简化,同时对项目的结构有了统一的规范和约定,如源码统一存放在src/main/java下,测试代码统一存放在src/test/java下,资源文件统一存放在src/resources下,编译后字节码存放在target目录下等等。

一句话,Maven让技术人员能够专注在业务逻辑上,极大提高了开发效率;

三、我的jar都是哪来的?
依赖仓库有多种,位于Apache的中心仓库http://mvnrepository.com/,柜内外也有大量镜像库,如阿里云的Maven仓库,会与中心仓库进行同步;同时可以创建公司私库,用来发布和存放库以提高下载速度或存放公司私有的jar便于统一管理;

无论依赖的jar来自哪个仓库,在开发人员本地,Maven都会创建一个本地仓库用于缓存已经下载的jar,避免每次从仓库下载,默认地址为用户文件夹下的.m2隐藏文件夹中。

四、Maven配置
Maven最核心的是pom.xml,使用xml方式描述项目模型,pom通常有以下元素:

groupId:表示项目所属的组,通常是一个公司或组织的名称,如:org.springframework;
artifactId:项目唯一标识,如mysql-connector-java;
packaging:项目打包方式,通常有war和jar两种;
version:项目版本号;


注:
通常来说,项目版本号分为三段,主版本号.次版本号.修订版本号。主版本号变动代表架构变动或不兼容实现,次版本号是兼容性修改、功能增强,修订版本号则是bug修复。版本后缀意味着不同的项目阶段,SNAPSHOT表示正在开发中的版本,会修复bug和添加新的功能;RELEASE表示一个正式的版本,中间可能还有M1,M2(M代表里程碑,即将发布)、RC(Release Candidate,发布候选)、GA(General Availiable,基本可用版本)等表示即将发布前的各个过程。SNAPSHOT<M1<M2<...<RC<GA<RELEASE


modelVersion:pom的Maven版本,目前是4.0.0;
dependencies:此元素下包含多个dependency,用来声明项目依赖,是pom中最核心的部分;
dependency:包含在dependencies中,用来声明项目依赖

dependency所包含的元素如下:


groupId、artifactId、version这三个与上面描述相同,不再赘述;
scope:代表此类库与本项目的关系,默认是compile,也就是编译打包都需要此类库;test表示尽仅在单元测试的时候需要;provided表示编译阶段需要此类库,带打包阶段不需要,因为项目环境中已经提供了;runtime表示编译和打包的时候都不需要,但运行的时候需要,如mysql驱动包;
optional:true/false,默认false,激活时代表该依赖仅在本项目中使用,子项目需要时需要重新写入该依赖;


bulid:此项在pom中可选,bulid包含了多个插件plugin用来辅助项目构建。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
早期Maven默认的Java版本是1.6,此处显式声明使用Java1.8编译,源代码使用的是UTF-8

五、其他:
关于Maven的安装、环境变量配置、阿里云镜像切换,IDE集成网上有很多资源,这里不再赘述;

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

推荐阅读更多精彩内容