项目管理Maven篇(1)-基础详解

本文主要讲解maven入门基础部分,关于更深层次的知识请阅读我的另一篇文章:项目管理Maven篇(2)- Sonatype Nexus

介绍

Maven是一个强大的项目管理工具,其构建特性被普遍用于项目管理,Maven本身也是由Java所开发,它的出现给项目管理带来了极大的方便,告别了手动构建的时代,至今使用Maven管理的大小型项目已经数不胜数,且Maven的使用比例一直在大幅增长。

引入背景

问题1:在项目没有引入Maven之前,开发一个项目常常是需要将所需要的jar包拷贝过来放到项目下,当项目不断扩大,项目下所依赖的包也更难管理,比如:spring的包可能会出现2个或3个或是更多的版本,这个时候项目开发成本不断增大,问题也随之而来。

问题2:在多模块项目开发时,项目A开发人员的功能模块依赖项目B开发人员的功能模块,在同步进行开发时常常不能及时有效的进行调试,jar包升级依赖问题得不到快速有效的解决。

概念部分

此部分为初次接触maven的朋友阅读部分,若了解maven的关系急需搭建项目的同学,请移步操作部分

Maven项目核心

Maven项目比普通的项目多一个pom.xml配置文件,这个xml文件主要描述该项目的构成,插件,以及项目依赖的外部jar包,pom全称为project object model。

简单的pom.xml

项目描述

maven对项目坐标进行了统一管理,这里项目描述是指描述
项目的坐标等信息,描述具体如下:
  1. modelVersion指定了当前Maven模型的版本号,目前版本默认是4.0.0

  2. groupId:当前 Maven 项目所属的实际项目,跟 Java 包名类似,通常与域名反向一 一对应(比如org.springframework)

  3. artifactId:当前 Maven 项目的一个模块,一般的,Maven 生成的构件,其文件名会以 artifactId 开头,如 mybatis-spring-1.2.2.jar

  4. version:定义项目版本。

  5. packaging:定义项目打包方式,如 jar,war,pom默认为 jar。

  6. classifier:定义项目的附属构件,如 mybatis-spring-1.2.2-sources.jar,mybatis-spring-1.2.2-javadoc.jar,其中 sources 和 javadoc 就是这两个附属构件的 classifier。classifier 不能直接定义,通常由附加的插件帮助生成。

  7. properties是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级


项目依赖

dependencies和dependency:前者为集合,包含多个后者,每个dependency即一个依赖,如上图依赖的junit就是通过唯一坐标去进行依赖的。
那么项目依赖就涉及到仓库的概念了,在开发工具中配置好依赖仓库后,则该项目会去仓库中进行依赖,下面介绍仓库的概念。


maven仓库

Maven仓库(repository)分为本地仓库、和远程仓库。
本地仓库:通俗讲为当前计算机的一个目录,用于存放对应的工程所需组件(jar包)。

远程仓库:是指非本地的远程网络上的仓库。私服、其他公共仓库、中央仓库均被称为远程仓库,远程仓库可以看做为一个庞大的项目组件仓库中心,私服是一种特殊远程仓库,它是部署局域网内的仓库。

我们安装开发工具带有maven功能后会被默认被初始化一个本地仓库,其路径在当前用户的.m2目录下,如下图:

.m2当前用户默认仓库

仓库核心配置

那么maven项目究竟是怎么依赖上仓库的,依赖的步骤是什么呢?
  1. maven项目是通过settings.xml文件对仓库进行依赖,开发工具配置好settings.xml文件后,其内容会被自动解析,settings.xml主要内容是描述仓库配置,仓库连接代理等具体参数等。开发工具设置图如下(原默认为该用户.m2目录仓库)。

    开发工具默认指向

    此处已配置为自己的仓库,给大家先看看,下面会进行详细的讲解
    demo,下面会进行详细介绍

  2. 依赖查找步骤如下:比如我前面项目我依赖了junit包,Maven工程首先会去本地仓库找这个jar包,当使junit的坐标无法在本地获取指定jar包时,本地仓库会从远程仓库中下载jar包,并放入本地仓库以备将来使用。

说了这么多估计作为初学者的你还是不太明白,怎么运用呢,怎么新建项目进行管理呢,那下面我们进入maven环境搭建,本地仓库设置,项目创建环节


操作部分

下载安装

其实常用的一些开发工具都已经集成了maven插件了,但一般我们开发人员都是自行下载进行安装,以免插件集成的bug问题
下载地址:http://maven.apache.org/download.cgi

下载界面,注意jdk版本

下载后解压出来放到指定的目录,并且配置环境变量,和JDK环境变量类似,此步骤这里就不进行描述了,配置完后打开CMD命令窗口输入 mvn –version,若打出版本信息则表示安装成功,如下:

安装成功

仓库配置

进入conf目录下会有一个settings.xml的配置文件,编辑修改本地仓库路径

仓库配置-修改前
仓库配置-修改后

集成Maven

我这里使用myeclipse进行演示,其他开发工具类似

  1. 添加指定刚刚下载解压出来的目录,选中bin上一层即可


    开发工具更换maven
  2. 修改User Settings保存

更改user setting

Maven项目创建(单项目)

new project
next

此处你需要进行选择,若你需要创建一个简单的java项目选择此项即可,如下:

quickstart-创建jar项目
webapp-创建web项目

未勾选artifactId创建web项目时出现了Maven Webapp,如下:

未勾选artifactId

我这里选择了quickstart创建普通java项目,接着下一步,这些属性maven描述那块已经描述过了,不明白的朋友可以仔细查看上述概念部分

选择创建普通项目

大家可以看看你的仓库路径是否存在依赖的包了,如果不存在则会去远程中央仓库下载,依赖就是通过这个描述文件的唯一坐标识别的

jar包被依赖下载下来

下面我们添加一个spring-mybatis.jar包的坐标配置查看情况,去网上搜索下找到spring-mybatis的坐标

search仓库中的坐标描述
复制坐标描述

将中央库的唯一坐标添加进来,然后保存

复制保存

保存后查看本地仓库,jar已经被下载下来了,因为你本地目录没有,所以会去中央库下载,若后续使用该版本的jar,则会首先通过坐标找到本地库的jar,如下图:

已下载到本地

注:其实大家会发现本地仓库突然多了很多包,这是因为都是刚刚使用到的junit和spring-mybatis所依赖的包,也一起被下载了下来,大家是不是能够想明白呢?自己依赖了别的包,别的包当然也会依赖其他的包,这就是依赖传递,这里暂时不做详细介绍。


这样建立起来的项目结构并不能称为一个完整的maven项目,一个完整的maven项目应该包含如下部分结构,所以需要新建src/main/resource和src/test/resource资源,这个大家自己去创建就行了如下图:

完整的工程示例

Maven项目创建(多模块)

在实际开发中一般都是多模块进行开发了,比如spring下面含很多子模块,下面简单介绍多模块的创建

  1. 新增一个简单的父项目壳子,我这里选择site-simple,其实选什么都无所谓,只需要确定该项目pom.xml的package的值为pom


    parent项目壳子
  2. 删除其中不要的东西,留下pom.xml即可


    删除其他部分
  3. 为parent项目添加1个子模块,这里选择module


    添加子模块
  4. 取名core-edu,其Parent Project一定要选择刚刚那个项目作为父项目


    core-edu
  5. 继续下一步,这里我只建立一个普通的jar,选择quickstart即可


    继续下一步
  6. 默认点击完成,即可看到工程目录下多了一个项目,而且在父项目下多了一个文件夹,此时可以查看父pom.xml文件


    query_parent
  7. 然后我们再在parent下面新建一个web项目,创建选择web app即可



  8. 我们来查看下子项目的pom.xml,大家可以看到出现了parent部分,那么这里有小知识点:凡是被parent圈住的项目,它的类型一定是pom,不可能是jar或war


Maven知识点很多,项目间的引用以及三方包管理一时也讲解不全,这里暂时不做讲解,大家有具体的问题可以具体查看网络资料,如有问题大家也可以提出来。

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

推荐阅读更多精彩内容