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

96
恒骊_任建君
2017.04.08 22:23* 字数 2294

本文主要讲解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知识点很多,项目间的引用以及三方包管理一时也讲解不全,这里暂时不做讲解,大家有具体的问题可以具体查看网络资料,如有问题大家也可以提出来。

日记本
Gupao