Maven入门

1. Maven概念模型

图1.png
  • 项目对象模型(Project Object Mobel)
    通过pom.xml定义项目的坐标、项目依赖、项目信息、插件目标等。每个maven工程中都有一个pom.xml文件(核心配置文件),该文件里面定义了工程所依赖的jar包、本工程的坐标、打包运行方式等。
  • 依赖管理系统(Dependency Management System)
    maven的基础核心,通过定义项目所依赖组件的坐标由maven进行依赖管理。也即maven通过坐标对项目工程所依赖的jar包进行统一规范的管理。
    比如:项目依赖Struts2.3.24,通过在pom.xml中定义依赖即可将Struts2的jar包自动加入到工程中,pom.xml中定义依赖如下:
    <dependency>
        <groundId>org.apache.struts</groundId>
        <artifactId>struts2-core</artifactId>
        <version>2.3.24</version>
    </dependency>
    
  • 一个项目生命周期(Project Lifecycle)
    一个软件开发人员每天都在完成项目的生命周期:清理、编译、测试、部署,有的手工完成,有的通过Ant(也是一个项目构建工具)脚本自动完成,maven将项目的生命周期抽象统一为:清理、初始化、编译、测试、报告、打包、部署、站点生成等。


    图2.png

    maven就是要保证一致的项目构建流程,通过执行一些简单命令即可实现上边生命周期的各个过程。

  • 一组标准集合
    maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。
    我在这儿还是强调一遍:maven工程有自己标准的工程目录结构、有标准的坐标定义。
  • 插件(plugin)目标(goal)
    maven管理项目生命周期过程都是基于插件完成的。

2. maven的仓库

maven工作需要配置仓库,本地的项目A、项目B等通过maven从远程仓库(可以理解为互联网上的仓库)下载jar包并保存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了。可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
下面描述了maven中仓库的类型:


图3.png
  • 本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。
  • 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认从远程仓库下载。
  • 中央仓库:在maven环境内部内置一个远程仓库地址:http://repo1.maven.org/maven2,它是中央仓库(即特殊的远程仓库),服务于整个互联网,它是由maven团队自己维护的,里面由大量的常用类库,并包含了世界上大部分流行的开源项目构件。

3. 安装

1). 下载和安装--下载地址
图4.png
  • bin目录:mvn.bat(以run方式运行项目)、mvnDebug.bat(以debug方式运行项目)
  • boot目录:maven运行需要的类加载器
  • conf目录:settings.xml,整个maven工具的核心配置文件
  • lib目录:maven运行依赖的jar包
2). 配置环境变量

I. 新建环境变量

图5.png

II. 将%MAVEN_HOME%\bin添加到path环境变量中
图6.png

III. 测试
在命令提示符中输入命令--mvn -v
图7.png

3). 本地仓库配置

本地仓库是用来存放联网下载的maven插件和jar包,maven本地仓库有的jar包将不再从互联网下载,所以本地仓库就相当于一个缓存。
在maven的安装目录中的conf目录下有一个settings.xml文件,在这个文件中可配置本地仓库


图8.png

如果本地仓库不配置(那么就会从互联网上下载jar包,而且下载速度贼慢),那么默认的本地仓库的位置就是{user.home}/.m2/repository目录,{user.home}表示windows用户目录,在win7系统下如下:

图9.png

  • 全局settings配置文件:就是maven的安装目录中的conf目录下的settings.xml文件。该文件里面的所有配置可应用于所有项目。
  • 用户settings配置文件:在${user.home}/.m2/repository目录下。如果某些用户需要对maven特殊设置,用户可以自定义settings文件
4). eclipse配置maven安装程序

高版本的eclipse默认已经集成了maven的插件,但其实还内置了maven程序,Window->Preferences,搜索maven如下:

图10.png

注意:我们一般不用内置的maven程序,原因是为了在项目中统一maven版本

5). 选择指定的maven程序

点击Add...->>然后选择自己电脑中的maven程序->>点击Finish。


图11.png

然后勾选新增的一项。


图12.png
6). 指定User Settings

点击User Settings->点击Browse...选择settings.xml文件->点击Update Settings,在Local Repository一项会自动填充仓库位置->点击Apply->OK。


图13.png
7). Eclipse浏览本地仓库

Window->Show View->Other->Maven->Maven Repositories.


图14.png

4. 测试项目

1). 新建项目

I. File->Other->Maven->Maven Project->Next


图15.png

II. 勾选Use default Workspace location是将工程创建在默认的路径下


图16.png

III. 点击最后一项->Next
图17.png
  • maven-archetype-quickstart: 普通Java工程
  • maven-archetype-webapp: Web工程
    IV. 配置信息->点击Finish.


    图18.png
  • Group Id:项目的名称,项目名称以域名的倒序命名(类似java包名),比如我们要创建一个CRM的项目,可写为cn.itcast.crm。
  • Artifact Id:模块名称(子项目名称)。
  • Version:项目当中模块的版本,snapshot(快照版或测试版,没有正式发行)、release(正式发行版本)。
  • Package:包名。Group Id + Artifact Id.
    V. 解决错误
    图19.png

    错误原因:未Server Runtime.
    解决办法:邮件项目->Build Path->Configure Build Path...->Libraries->Add Library...->Next->apply..
    图20.png

    图21.png

    VI. 项目结构
    图21.png

    *注意:新创建的maven工程的目录结构不是一个完整的目录结构。
    maven工程的一个完整的目录结构为:
project
    /src/main/java       主体程序的java源文件(不要放配置文件)
    /src/main/resources  主体程序所需要的配置文件(不要放java文件)
    /src/test/java       单元测试程序的java源文件
    /src/test/resources  单元测试程序所用的配置文件
    /target              编译输出目录
    /pom.xml
2). 配置

I. 设置maven的编译版本,由于我使用的是JDK1.8,所以要设置maven的编译版本为1.8,即要在maven工程的pom.xml文件中添加如下配置:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mazaiting.cmp</groupId>
    <artifactId>MavenTest</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>MavenTest Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>MavenTest</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

maven运行的时候都是依赖于插件的,包括编译也是需要通过插件——org.apache.maven.plugins(该插件就在你的本地仓库)来完成。
II. 添加完如上配置之后,可发现我们的maven工程上面有一个红叉,如下所示:

图22.png

III. 更新项目。右键项目->Maven->Update Project...


图23.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容

  • Maven入门教程 1.1.介绍、环境配置 1.1.1.Maven介绍 Maven是一个采用纯Java编写的开源项...
    安易学车阅读 1,459评论 2 10
  • 简介 概述 Maven 是一个项目管理和整合工具 Maven 为开发者提供了一套完整的构建生命周期框架 Maven...
    闽越布衣阅读 4,293评论 6 39
  • 导语 最近在学习Java了,以后分享的文章主要就以Java为主了,偶尔也会分享一下Objective-C方面的文章...
    国士无双A阅读 11,738评论 0 24
  • Maven 简介 Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一...
    GavinHacker阅读 3,017评论 0 6
  • 乡夜寂静,欲睡还惊,楼外蛩声轻吟。 独处闲来念起,思绪分明。 斟酌此行所为,眉深锁,往事回萦。 手掩面,似落花初月...
    逸塵居士阅读 245评论 0 0