前言java
在这以前一直都有去看关于Maven的相关介绍,可是没有到真正要用的时候,本身老是觉得懂了。其实真的感受Maven并无想象的那么简单!web
那咱们该怎么去学习maven呢?接下来我将从:spring
初步认识maven,获取jar包的三个关键属性 --> 介绍仓库(获取的jar包从何而来)-->用命令行管理maven项目(建立maven项目) --> 用myeclipse建立maven项目 -->详细介绍pom.xml中的依赖关系(坐标获取、定位jar包的各类属性讲解)。apache
为何要去使用maven呢?缓存
举例1:假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢?框架
很简单,这不就是跟咱们以前写程序时同样吗,须要用哪一个项目中的哪些类,也就是用别人写好了的功能代码,导入jar包便可。因此这里也如此,能够将B项目打成jar包,而后在A项目的Library下导入B的jar文件,这样,A项目就能够调用B项目中的某些类了。eclipse
这样作几种缺陷maven
若是在开发过程当中,发现B中的bug,则必须将B项目修改好,并从新将B打包并对A项目进行重编译操做ide
在完成A项目的开发后,为了保证A的正常运行,就须要依赖B(就像在使用某个jar包时必须依赖另一个jar同样),两种解决方案,第一种,选择将B打包入A中,第二种,将B也发布出去,等别人须要用A时,告诉开发者,想要用A就必须在导入Bjar包。工具
两个都很麻烦,前者可能形成资源的浪费(好比,开发者可能正在开发依赖B的其它项目,B已经存储到本地了,在导入A的jar包的话,就有了两个B的jar),后者是咱们常遇到的,找各类jar包,很是麻烦(有了maven就不同了)
举例2:咱们开发一个项目,或者作一个小demo,好比用SSM框架,那么咱们就必须将SSM框架所用的几十个依赖的jar包依次找出来并手动导入,超级繁琐。
上面两个问题的描述,其实都属于项目与项目之间依赖的问题[A项目使用SSM的全部jar,就说A项目依赖SSM],人为手动的去解决,很繁琐,也不方便,因此使用maven来帮咱们管理。
Maven能够翻译为“知识的积累”、“专家”、“内行”。做为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理、和项目信息管理。Maven在各种项目中均可以大显身手。
1) Maven是优秀的构建工具
除了编写源代码,咱们天天有至关一部分时间花在了编译,运行单元测试,生成文档,打包,部署等繁琐且不起眼的工做上,这就是构建。Maven就是一个异常强大的构建工具,可以帮咱们自动化构建过程,从清理,编译,测试,到生成报告,再到打包和部署。
咱们不须要一遍一遍的输入命令, 一次又一次点击鼠标,Maven帮咱们很方便的搞定。Maven是跨平台的。
2) Maven仍是依赖管理工具和项目信息管理工具
Maven经过一组坐标可以找到任何一个Java类库(如jar),Maven给这个类库世界引入了经纬,让它们变得有秩序,因而咱们能够借助它来有序地管理依赖,轻松地解决那些繁杂的依赖问题。
Maven还能帮助咱们管理本来分散在项目中各个角落的项目信息,包括项目描述,开发者列表,版本控制系统地址,许可证,缺陷管理系统地址等。除了直接的项目信息,经过Maven自动生成的站点,
以及一些已有的插件,咱们还能轻松地得到项目文档、测试报告、静态分析报告、源码版本日志报告等很是具备价值的项目信息。
3) 仓库
Maven为全世界的Java开发者提供了一个免费的中央仓库,在其中几乎能够找到任何流行开源类库。经过Maven的一些衍生工具(如Nexus),咱们还能对其进行快速地搜索。只要定位了坐标,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包等等。
项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。
依赖指的是jar包之间的相互依赖,好比咱们搭建一个Struts2的开发框架时,光光有struts2-core-2.3.16.3.jar这个jar包是不行的,struts2-core-2.3.16.3.jar还依赖其它的jar包,
依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所须要的jar包,统一管理jar包之间的依赖关系”。
1)Maven中使用约定,约定java源代码代码必须放在哪一个目录下,编译好的java代码又必须放到哪一个目录下,这些目录都有明确的约定。
2)Maven的每个动做都拥有一个生命周期,例如执行 mvn install 就能够自动执行编译,测试,打包等构建过程。
3)只须要定义一个pom.xml,而后把源码放到默认的目录,Maven帮咱们处理其余事情
4)使用Maven能够进行项目高度自动化构建,依赖管理(这是使用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版本,第三方软件等简要介绍
1)首先你要确保你的电脑已经安装了jdk1.6版本以上的,并配置好了JDK的环境变量。
2)对apache-maven-3.3.9-bin.zip进行解压缩,例如解压到以下目录(解压目录最好不要有中文)
3)第三步:配置环境变量
4)设置环境变量path,将%M2_HOME%\bin加入到path中,必定要注意使用分号;隔开。
5)验证是否配置成功:打开cmd命令——>输入:mvn-v
经过pom.xml中的配置,就可以获取到想要的jar包(还没讲解如何配置先须要了解一下仓库的概念),可是这些jar是在哪里呢?就是咱们从哪里获取到的这些jar包?答案就是仓库(用来统一存储全部Maven共享构建的位置)。
仓库分为:本地仓库、第三方仓库(私服)、中央仓库
Maven会将工程中依赖的构件(Jar包)从远程下载到本机一个目录下管理,每一个电脑默认的仓库是在 $user.home/.m2/repository下
个人就是在:C:\Users\Shinelon\.m2\repository
通常咱们会修改本地仓库位置,本身建立一个文件夹,在从网上下载一个拥有相对完整的全部jar包的结合,都丢到本地仓库中,而后每次写项目,直接从本地仓库里拿就好了
这里面的jar包相对的完整,不少都是咱们须要的。
修改本地库位置:在$MAVEN_HOME/conf/setting.xml文件中修改
E:\AStudySoftwere\mavenrepository:就是咱们本身建立的本地仓库,将网上下载的全部jar包,jar包默认的下载存储位置,咱们就能够直接经过maven的pom.xml文件直接拿。
把jar包下载到本地的好处就是,当编译时,会优先从本地的jar包去找,若是本地存在,就直接拿来用,若是不存在,就从Maven的中心仓库去下载。
第三方仓库,又称为内部中心仓库,也称为私服(一种特殊的远程仓库,它是架设在局域网内的仓库)。
私服:通常是由公司本身设立的,只为本公司内部共享使用。它既能够做为公司内部构件协做和存档,也可做为公用类库镜像缓存,减小在外部访问和下载的频率。(使用私服为了减小对中央仓库的访问
私服可使用的是局域网,中央仓库必须使用外网(通常公司都会建立这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每一个人的版本就都同样。)
注意:链接私服,须要单独配置。若是没有配置私服,默认不使用
Maven内置了远程公用仓库:http://repo1.maven.org/maven2
这个公共仓库是由Maven本身维护,里面有大量的经常使用类库,并包含了世界上大部分流行的开源项目构件。目前是以java为主
工程依赖的jar包若是本地仓库没有,默认从中央仓库下载
MavenProjectRoot(项目根目录)
|----src
| |----main
| | |----java ——存放项目的.java文件
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件
| |----test
| | |----java ——存放全部测试.java文件,如JUnit测试类
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件
|----target ——项目输出位置
|----pom.xml ----用于标识该项目是一个Maven项目
图中有一个target目录,是由于将该java项目进行了编译,src/main/java下的源代码就会编译成.class文件放入target目录中,target就是输出目录。
1)建立项目的根文件夹:FirstMaven
2)建立一个pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--全部的Maven项目都必须配置这四个配置项--> <modelVersion>4.0.0</modelVersion> <!--groupId指的是项目名的项目组,默认就是包名--> <groupId>cn.gacl.maven.hello</groupId> <!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"--> <artifactId>hello-first</artifactId> <!--version指的是版本,这里使用的是Maven的快照版本--> <version>SNAPSHOT-0.0.1</version> </project>
3)编写Java类文件,Maven项目规定,全部的*.java文件必须放在src目录下的main目录下的java目录中,在FirstMaven项目根目录中建立一个src目录,而后在src目录中建立main目录,在main目录中再建立java文件夹。
4)使用Maven编译Hello.java,首先进入到项目根目录,而后使用命令”mvn compile”进行编译
使用Maven编译完成以后,在项目的根目录会产生一个target文件夹。打开target文件夹,能够看到里面有一个classes文件夹,classes文件夹存放的就是编译成功后生成的.class文件。
5)使用"mvn clean"命令清除编译结果,也就是把编译生成的target文件夹删掉
持续更新中,以为不错点个“推荐”哦!