Maven(一)Maven概述与安装

前言

没有接触过Maven的人,可能会一脸蒙逼,它是个什么东西?
我们就从问题中去发现它的价值,比如说:
假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目
中的某些类,那么如何维系这种依赖关系的呢?
 很简单,这不就是跟我们之前写程序时一样吗,需要用哪个项目中的哪些类,也就是用别人写好了
的功能代码,导入jar包即可。所以这里也如此,可以将B项目打成jar包,然后在A项目的Library
下导入B的jar文件,这样,A项目就可以调用B项目中的某些类了。
这样做几种缺陷:

  • 如果在开发过程中,发现B中的bug,则必须将B项目修改好,并重新将B打包并对A项目进行重编译操作.
  • 在完成A项目的开发后,为了保证A的正常运行,就需要依赖B(就像在使用某个jar包时必须依赖另外一
    个jar一样),两种解决方案,第一种,选择将B打包入A中,第二种,将B也发布出去,等别人需要用A时,
    告诉开发者,想要用A就必须在导入Bjar包。
  • 两个都很麻烦,前者可能造成资源的浪费(比如,开发者可能正在开发依赖B的其它项目,B已经存储到
    本地了,在导入A的jar包的话,就有了两个B的jar),后者是我们常遇到的,找各种jar包,非常麻烦
    (有了maven就不一样了).

再举例说:

  • 我们开发一个项目,或者做一个小demo,比如用SSM框架,那么我们就必须将SSM框架所用的几十个依赖
    的jar包依次找出来并手动导入,超级繁琐。

上面两个问题的描述,其实都属于项目与项目之间依赖的问题[A项目使用SSM的所有jar,就说A项目依赖
SSM],人为手动的去解决,很繁琐,也不方便,所以使用maven来帮我们管理。

一、Maven概述

1.1 Maven简介

Maven可以翻译为“知识的积累”、“专家”、“内行”。作为Apache组织中的一个颇为成功的开源项目,Maven
主要**服务于基于Java平台的项目构建、依赖管理、和项目信息管理。**Maven在各类项目中都可以大显身手。

  • Maven是优秀的构建工具
    除了编写源代码,我们每天有相当一部分时间花在了编译,运行单元测试,生成文档,打包
    部署等繁琐且不起眼的工作上,这就是构建。Maven就是一个异常强大的构建工具,能够帮
    我们自动化构建过程,从清理,编译,测试,到生成报告,再到打包和部署

  • Maven还是依赖管理工具和项目信息管理工具
     1)Maven通过一组座标能够找到任何一个Java类库(如jar),Maven给这个类库世界引入了经纬,
    让它们变得有秩序,于是我们可以借助它来有序地管理依赖,轻松地解决那些繁杂的依赖问题。
     2)Maven还能帮助我们管理原本分散在项目中各个角落的项目信息,包括项目描述,开发者列表,
    版本控制系统地址,许可证,缺陷管理系统地址等。除了直接的项目信息,通过Maven自动生成的站点,
    以及一些已有的插件,我们还能轻松地获得项目文档、测试报告、静态分析报告、源码版本日志报告等
    非常具有价值的项目信息。

  • 仓库
    Maven为全世界的Java开发者提供了一个免费的中央仓库,在其中几乎可以找到任何流行开源类库。
    通过Maven的一些衍生工具(如Nexus),我们还能对其进行快速地搜索。只要定位了座标,Maven就
    能够帮我们自动下载,省去了手工劳动。

1.2 理解Maven

  • 如果没明白maven是什么,那个人觉得,Maven的核心功能便是合理叙述项目间的依赖关系
    通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml
    文件对于学了一点maven的人来说,就有些熟悉了。

  • 怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?等等类似问题我们
    需要搞清楚,如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目。

  • maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目
    还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能
    了(通过pom.xml添加jar包)。

  • 所以,根据上一段的描述,我们最终的目的就是学会如何在pom.xml中配置获取到我们想要的
    jar包,在此之前我们就必须了解如何创建maven项目,maven项目的结构是怎样,与普通java,
    web项目的区别在哪里,还有如何配置pom.xml获取到对应的jar包等等。

1.3 项目的构建与依赖管理

  • 项目构建过程
    【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】
    这六个步骤就是一个项目的完整构建过程。

  • 依赖管理
    1)依赖
     jar包之间的相互依赖,比如我们搭建一个Struts2的开发框架时,光光有struts2-core-2.3.16.3.jar
    这个jar包是不行的,struts2-core-2.3.16.3.jar还依赖其它的jar包。
    2)依赖管理
     依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的
    jar包,统一管理jar包之间的依赖关系”。

1.4 Maven的优点

  • Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个
    目录下,这些目录都有明确的约定。
  • Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等
    构建过程。
    只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情。
  • 只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情。
  • 使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理

1.5 Maven目标

Maven主要目标是提供开发人员:

  • 项目是可重复使用,易维护,更容易理解的一个综合模型。
  • 插件或交互的工具,这种声明性的模式

Maven项目的结构和内容是在一个XML文件中声明,pom.xml的项目对象模型(POM),
这是整个Maven系统的基本单元。 

二、Maven安装(Windows)

2.1 Maven下载

下载链接:http://maven.apache.org/download.cgi

下载完成后,得到一个压缩包解压,可以看到maven的组成目录:

目录介绍:

  • bin:含有mvn运行的脚本
  • boot:含有plexus-classworlds类加载器框架
  • conf:含有settings.xml配置文件
  • lib:含有Maven运行时所需要的java类库
  • LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍

2.2 Maven的安装

  • 首先你要确保你的电脑已经安装了jdk1.6版本以上的,并配置好了JDK的环境变量。
  • 对apache-maven-3.3.9-bin.zip进行解压缩,例如解压到如下目录(解压目录最好不要有中文)
  • 第三步:配置环境变量
  • 设置环境变量path,将%M2_HOME%\bin加入到path中,一定要注意使用分号;隔开。
  • 验证是否配置成功:打开cmd命令——>输入:mvn-v

三、Maven安装(CentOS7)

  • 下载安装文件
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
  • 解压安装
tar -zxvf apache-maven-3.3.9-bin.tar.gz 
mv apache-maven-3.3.9 maven (这一步骤可省略,主要是为了后面方便操作)
  • 配置环境变量
    1)使用vim编辑/etc/profile文件
vim /etc/profile

2)在/etc/profile文件末尾增加以下配置:

M2_HOME=/opt/tyrone/maven (注意这里是maven的安装路径)
export PATH=${M2_HOME}/bin:${PATH}

3)重载/etc/profile文件

source /etc/profile
  • 检验maven是否安装成功
mvn -v 

四、Maven仓库

通过pom.xml中的配置,就能够获取到想要的jar包(还没讲解如何配置先需要了解一下
仓库的概念),但是这些jar是在哪里呢?就是我们从哪里获取到的这些jar包?答案就是
仓库(用来统一存储所有Maven共享构建的位置)。

仓库分为:本地仓库、第三方仓库(私服)、中央仓库

4.1 本地仓库

Maven会将工程中依赖的构件(Jar包)从远程下载到本机一个目录下管理,
每个电脑默认的仓库是在 $user.home/.m2/repository下.

我的就是在:C:\Users\Shinelon.m2\repository
一般我们会修改本地仓库位置,自己创建一个文件夹,在从网上下载一个拥有相对完整的
所有jar包的结合,都丢到本地仓库中,然后每次写项目,直接从本地仓库里拿就行了。

这里面的jar包相对的完整,很多都是我们需要的。

修改本地仓库位置:在$MAVEN_HOME/conf/setting.xml文件中修改

编辑:

1)E:\AStudySoftwere\mavenrepository:就是我们自己创建的本地仓库,
将网上下载的所有jar包,jar包默认的下载存储位置,我们就可以直接通过
maven的pom.xml文件直接拿。
2)把jar包下载到本地的好处就是,当编译时,会优先从本地的jar包去找,
如果本地存在,就直接拿来用,如果不存在,就从Maven的中心仓库去下载。

42. 第三方仓库(私服)

第三方仓库,又称为内部中心仓库,也称为私服(一种特殊的远程仓库,它是架设在局域网内的仓库)
私服:一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和
存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。(使用私服为了减少对中央仓库
的访问私服可以使用的是局域网,中央仓库必须使用外网(一般公司都会创建这种第三方仓库,保证
项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。)

注意:连接私服,需要单独配置。如果没有配置私服,默认不使用

4.3 中央仓库

Maven内置了远程公用仓库:http://repo1.maven.org/maven2
这个公共仓库是由Maven自己维护,里面有大量的常用类库,幷包含了世界上大部分流行的
开源项目构件。目前是以java为主工程依赖的jar包如果本地仓库没有,默认从中央仓库下载。

五、Maven获取Jar包过程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章