一、maven介绍

1.软件开发中我们为什么要使用maven呢?(纯属个人体会观点,如有错误,敬请指正)

    (1)其一,企业岗位需求,目前的IT开发招聘岗位上,基本都要求会使用maven。
           (2)其二,使用maven可以帮助我们解决软件开发中遇到的一些困难问题。我们先来看看项目开发中可能存在的一些问题。
       1.1    jar包的依赖与管理    我们都知道,一个项目开发一般都依赖着许多的jar包。jar包的使用可能存在的问题如下: 
           问题一: 不能确定jar包的完全正确性(比如我们百度下载的jar包,不一定保证其正确性。要是不同的员工下载的jar包都是来自不同的网站,然后在项目中使用,如果没有确保jar包的安全性,如果在生产线上出问题了,将会造成不可估量的损失)
                  问题二: 不同技术框架版本的管理(如spring2.0、spring2.1、如果同一个公司不同的开发人员使用的jar包版本不一致,比如A使用spring1.0,而B使用spring2.0,导致jar包显得很臃肿,而且可能会产生其他的问题,这样子管理起来就很难)、
                问题三: 不同jar包之间的相互依赖(spring2.0中存在的许多的jar包,jar包之间存在着相互依赖的关系,比如a包依赖b包,b又依赖c包,等。我们如何保证每次拷贝jar包的时候不会出现遗漏jar的情况,如果遗漏的jar包的拷贝,程序运行的时候时常就出现了这种ClassNotFoundException的错误等)
           那么maven是如何解决jar包的依赖与管理呢?maven允许我们可以自己搭建一个jar仓库,项目中依赖的jar包直接在一个文件中定义声明,同时指定jar包所在的位置,当程序跑起来的时候依赖的jar包maven会帮助我们下载到本地上。这就好比我们程序一样,先定义变量,然后再使用。
       1.2    自动构建项目     我们先来了解一下软件开发的过程。

    一般软件开发的流程如下:

             - 软件开发: 可行性分析--->需求分析--->软件设计--->软件开发--->发布--->运维

    那么什么是自动构建项目呢?大体可以这么认为:

               - 软件构建: 软件已经开发完毕,需要构建成一个产品进行发布,供用户使用。

我们都知道,在myeclipse上编写的java文件,myeclipse会自动帮助我们编译,然后由我们运行发布。
          如果没有这个工具,那么我们应该怎么编译源程序呢。

一般项目构建步骤如下:
                  清除--> 编译-->测试-->报告-->打包(jar\war)-->安装-->部署到远程

myeclipse虽是一个集成开发工具,但是对上面的项目构建操作只是分开进行操作,而且有些操作并不能进行,比如报告等,需要开发人员自己写报告,这样子就不能达到我们开发效率的要求。

而通过maven的使用, 不仅解决了上面我们遇到的jar包的依赖与管理的问题,而且可以通过一个命令实现自动构建软件项目,到达我们需要的开发效率。当然我们就得学习使用了。

2.引入maven
     1. maven介绍

    - 介绍:  Maven是一个采用纯Java编写的开源项目管理工具,Maven采用了一种被称之为Project Object Model (POM)概念来管理项目, 所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。
       - pom(项目对象模型)(如何理解pom呢)如下图所示:

    

    我们可以这么理解pom: 比如项目A开发中,我们项目中存在许多的类1,类2....以及各种配置文件等,pom(项目对象模型)管理的不只是项目中的单一类,或者是项目的某个配置文件,而管理的是整个项目A,针对的是整个项目A。

  那么什么是软件构建的生命周期呢?我们可以这么理解、

      - 软件构建的生命周期
                       清除--> 编译-->测试-->报告-->打包(jar\war)-->安装-->部署到远程

2. maven 解决的问题
        - jar包的声明式依赖管理与管理(图解其优势所在)
     

  以前进行项目开发的时候,我们需要对jar包进行拷贝,经常从不同的项目中拷贝到新的项目。由此就可能产生一些新的问题。比如有些jar包,新项目并不依赖,而我们拷贝过来了,这就显得多余了。而如果我们只拷贝一部分,可能会出现jar包相互依赖导致类找不到的问题。而maven的出现解决了这些问题。maven对项目的结构进行了一些约束,规定项目的目录问题。每个maven项目中都有一个pom.xml文件,maven是通过pom.xml文件来定义项目所依赖的jar包的,我们项目中需要什么jar包就直接在pom.xml中进行定义,需要的时候帮助我们自动进行下载。比如我们可以搭建公司的私服服务器,里面存放了许多的不同版本的jar包。我们在pom.xml文件中定义依赖的jar包,当项目跑起来的时候,会自动到公司私服中寻找依赖的jar包并进行下载到本地,jar包如果存在依赖也会帮助我们进行其他的jar包下载;如果私服中找不到的话,就会自动到中心仓库寻找jar包,当然一般我们需要的jar包都会存在的。

maven入门学习(一)的更多相关文章

  1. Maven入门学习

    1 Maven的安装 maven下载路径:http://maven.apache.org/download.cgi 我是在win7上安装了,安装后在cmd输入 mvn -v: C:\Users\*** ...

  2. Maven入门学习 (一)

    学习Java 的同学就一定会学习Maven, 那么Maven为什么会得到大量用户的使用呢?它是用来干什么的呢 ?接下来就来介绍 Q:Maven的作用? (1)Maven可以自动化构建项目,可以从清理. ...

  3. Maven入门学习,安装及创建项目

    一.maven介绍: 1.maven是一个基于项目对象模型(POM Project Object Model),通过配置文件管理项目的工具(项目管理工具). 2.maven主要功能:发布项目(从编译到 ...

  4. Maven学习专题--Maven入门及安装

    因为项目需要,新项目需要使用Maven开发,但是组内大部分没有接触过maven.我就毅然承担搭建maven环境的任务了.因为一切重头开始,就想把自己的整个搭建环境.项目创建.框架整合和模块管理整个过程 ...

  5. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  6. Maven学习总结(1)——Maven入门

    Maven学习总结(一)--Maven入门 一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的 ...

  7. Maven入门详解

    什么是Maven Maven,鼎鼎大名,在今天之前,我对于它一直是处于一种"只闻其名不见其人"的状态.之所以说"只闻其名",是因为Maven太有名了,它是Apa ...

  8. Maven入门详解以及Eclisp的集成

    1.首先要安装Maven到操作系统上 Maven的下载页面:http://maven.apache.org/download.html Maven跟Tomcat很像,下载下来后直接解压在指定的目录就安 ...

  9. Maven入门2-pom.xml文件与settings.xml文件

    Maven入门2-pom.xml文件与settings.xml文件 本文内容来源于官网文档部分章节,settings.xml文件:参考http://maven.apache.org/settings. ...

随机推荐

  1. 从TensorFlow0.12升级到TensorFlow1.13

    sudo pip install --upgrade tensorflow-gpu $ sudo pip install --upgrade tensorflow-gpu[sudo] password ...

  2. ACM/ICPC Moscow Prefinal 2019 趣题记录

    ### Day1: ### **Problem C:** 设$k_i​$为$[A, B]​$中二进制第$i​$位是1的数的个数. 给出$k_0 \cdots k_{63}​$, 求出$[A, B]​$ ...

  3. BestCoder Round #81 (div.2) 1004 String(动态规划)

    题目链接:BestCoder Round #81 (div.2) 1003 String 题意 中文题,上有链接.就不贴了. 思路 枚举起点i,计算能够达到k个不同字母的最小下标j,则此时有子串len ...

  4. ajax 跨域 4种方法

    一,传统的ajax方法 1,js代码 查看复制打印? $("#ajax").click(function(){ $.ajax({ type: "POST", u ...

  5. hdu 4289(最小割)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4289 思路:求最小花费,最小割应用,将点权转化为边权,拆点,(i,i+n)之间连边,容量为在城市i的花 ...

  6. poj 3281(网络流+拆点)

    题目链接:http://poj.org/problem?id=3281 思路:设一个超级源点和一个超级汇点,源点与食物相连,饮料与汇点相连,然后就是对牛进行拆点,一边喜欢的食物相连,一边与喜欢的饮料相 ...

  7. Duilib教程-控件练习

    一.控件消息的响应. 在HelloDuilib例子中,程序不能退出,在这里,我将添加一个关闭按钮,当点击它时,调用PostQuitMessage进行退出. 首先在界面的右上角添加一个关闭按钮,并取名为 ...

  8. 常用sql 增删改、批量、合并、去重、增列、

    自己总结的一些常用sql :插入.删除.批量更新.判重.新增列.数据库连接数 ---------------- 批量插入跨数据库 insert into ejpms.dbo.role (Name,In ...

  9. SpringMVC如何接收json数据

    请求头:Content-Type=application/json数据如: {"mobile":"12345678912","smsContent&q ...

  10. JDK源码分析之concurrent包(三) -- Future方式的实现

    上一篇我们基于JDK的源码对线程池ThreadPoolExecutor的实现做了分析,本篇来对Executor框架中另一种典型用法Future方式做源码解读.我们知道Future方式实现了带有返回值的 ...