美文网首页@IT·互联网
项目管理Maven篇(1)-基础详解

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

作者: 君哥聊编程 | 来源:发表于2017-04-08 22:23 被阅读0次

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

    相关文章

      网友评论

        本文标题:项目管理Maven篇(1)-基础详解

        本文链接:https://www.haomeiwen.com/subject/afoxattx.html