Maven(一)初识Maven

前言

在这之前一直都有去看关于Maven的相关介绍,但是没有到真正要用的时候,自己总是以为懂了。其实真的感觉Maven并没有想象的那么简单!

那我们该怎么去学习maven呢?接下来我将从:

      初步认识maven,获取jar包的三个关键属性 --> 介绍仓库(获取的jar包从何而来)-->用命令行管理maven项目(创建maven项目) --> 用myeclipse创建maven项目 -->详细介绍pom.xml中的依赖关系(坐标获取、定位jar包的各种属性讲解)。

为什么要去使用maven呢?

举例1:假如你正在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就不一样了)

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

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

一、Maven概述

1.1、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就能够帮我们自动下载,省去了手工劳动。

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、项目的构建与依赖管理

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

 依赖指的是jar包之间的相互依赖,比如我们搭建一个Struts2的开发框架时,光光有struts2-core-2.3.16.3.jar这个jar包是不行的,struts2-core-2.3.16.3.jar还依赖其它的jar包,

  依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,统一管理jar包之间的依赖关系”。

1.4、Maven的优点

 1)Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定。

 2)Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程。

 3)只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情

 4)使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理。

二、Maven的安装

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的安装

  1)首先你要确保你的电脑已经安装了jdk1.6版本以上的,并配置好了JDK的环境变量。

  2)对apache-maven-3.3.9-bin.zip进行解压缩,例如解压到如下目录(解压目录最好不要有中文)

  3)第三步:配置环境变量

  4)设置环境变量path,将%M2_HOME%\bin加入到path中,一定要注意使用分号;隔开。

  5)验证是否配置成功:打开cmd命令——>输入:mvn-v   

三、Maven仓库

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

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

3.1、本地仓库

  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的中心仓库去下载。

3.2、第三方仓库(私服)

  第三方仓库,又称为内部中心仓库,也称为私服(一种特殊的远程仓库,它是架设在局域网内的仓库)。

  私服:一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。(使用私服为了减少对中央仓库的访问

  私服可以使用的是局域网,中央仓库必须使用外网(一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。)

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

3.3、中央仓库

  Maven内置了远程公用仓库:http://repo1.maven.org/maven2

  这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。目前是以java为主

  工程依赖的jar包如果本地仓库没有,默认从中央仓库下载

3.4、Maven获取jar的过程

四、手动创建Maven项目

4.1、Maven的目录结构

  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就是输出目录。

4.2、手动创建一个Maven项目

  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文件夹删掉

持续更新中,觉得不错点个“推荐”哦!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ken的杂谈

【系统设置】CentOS 修改机器名

17230
来自专栏微信公众号:小白课代表

不只是软件,在线也可以免费下载百度文库了。

不管是学生,还是职场员工,下载各种文档几乎是不可避免的,各种XXX.docx,XXX.pptx更是家常便饭,人们最常用的就是百度文库,豆丁文库,道客巴巴这些下载...

43230
来自专栏FSociety

SQL中GROUP BY用法示例

GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

5.1K20
来自专栏haifeiWu与他朋友们的专栏

复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

26440
来自专栏前端桃园

知识体系解决迷茫的你

最近在星球里群里都有小伙伴说道自己对未来的路比较迷茫,一旦闲下来就不知道自己改干啥,今天我这篇文章就是让你觉得一天给你 25 个小时你都不够用,觉得睡觉都是浪费...

19440
来自专栏腾讯社交用户体验设计

ISUX Xcube智能一键生成H5

50620
来自专栏怀英的自我修炼

考研英语-1-导学

英二图表作文要重视。总体而言,英语一会比英语二难点。不过就写作而言,英语二会比英语一有难度,毕竟图表作文并不好写。

11210
来自专栏钱塘大数据

中国互联网协会发布:《2018中国互联网发展报告》

在2018中国互联网大会闭幕论坛上,中国互联网协会正式发布《中国互联网发展报告2018》(以下简称《报告》)。《中国互联网发展报告》是由中国互联网协会与中国互联...

13150
来自专栏腾讯高校合作

【倒计时7天】2018教育部-腾讯公司产学合作协同育人项目申请即将截止!

15020
来自专栏钱塘大数据

理工男图解零维到十维空间,烧脑已过度,受不了啦!

让我们从一个点开始,和我们几何意义上的点一样,它没有大小、没有维度。它只是被想象出来的、作为标志一个位置的点。它什么也没有,空间、时间通通不存在,这就是零维度。

26630

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励