Maven入门

Maven

[TOC]

1.Maven简介

1.1 什么是Maven

 maven是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的.

1.1.1 项目对象模型

POM对象模型,每个maven工程都有个pom.xml文件,定义工程所依赖的jar包,本工程的坐标,打包运行方式.

1.1.2. 依赖管理系统(基础核心)

 maven通过坐标对项目工程所依赖的jar包统一规范管理.

1.1.3 的好处

一般项目:jar包在项目中,工程笔记大.

maven管理的项目:jar包与工程分离,小巧轻便.

  1. 依赖管理,就是对jar包的统一管理,可以节省空间
  2. 一键构建
  3. 可以跨平台
  4. 应用与大型项目,可以诶提高开发效率
  5. maven的分模块开发

1.3 项目管理

依赖管理:项目与依赖之间的关系称为依赖管理.

1.4 项目一键构建

普通项目构建:编码 → 编译 → 测试 → 打包 → 部署

maven项目构建:编译 → 测试 → 打包 → 部署

一键运行命令: tomcat:run 能把项目运行起来.

maven 可以做的事情
编译 → 测试 → 打包 → 部署

1.5 Maven仓库介绍

1. 中央仓库

 就是远程仓库,仓库中jar由专业团队(maven团队)统一维护.
中央仓库地址http://repo1.maven.org/maven2/

2. 本地仓库

 相当于缓存,工程第一次会从远程仓库(互联网)去下载jar包,将jar包存放在本地仓库(在程序员的个人电脑上).第二次不需要从远程仓库去下载,先从本地仓库找,如果找不到才会去远程仓库找.

3. 私服

&emap;在公司内部架设一台服务器,其他公司可架设一台仓库,对外公开.

2. Maven的安装配置

2.1 下载安装maven软件

可以到maven的官网下载

http://maven.apache.org/download.cgi

我们将下载的压缩包解压到D盘根目录,D盘根目录会有下面的文件夹(不包含中文目录的就可以了.)

2.2 本地仓库配置.

  1. 打开maven的安装目录
  2. 找到cnf/setting.xml,打开
  3. <localRepository>D:\repository_ssh</localRepository>

注意:这里的意思是配置本地仓库的目录为D:\repository_ssh 配置自己的仓库地址

2.3 maven环境变量配置及配置

maven3.3x 所需要的JDK都是需要1.7以上的版本.

1. 下载maven

下载后直接解压就可以使用

2. 配置环境变量

img
  • 配置MAVEN_HOME
    • 变量名:MAVEN_HOME
    • 变量值: maven的安装目录
  • 配置path
    • 后面加上路径,注意:前后需要用分号隔开
    • ;%MAVEN_HOME\bin%;

3. 配置本地仓库

在安装目录下的conf下的 settings.xml 设置本地仓库的路径

  <localRepository>C:\develop\maven\repository</localRepository>

这样maven就可以直接使用本地仓库而不需要从网上下载.如果你没有设置,本地仓库那么maven会在c:\用户\目录下新建一个文件夹.

3. 入门程序

3.1 创建工程

  1. 打开eclipse 创建一个MavenProject工程选择Next
  2. 在New Maven Project 窗口内. 勾选 Create a simple project (skip .....) , Next .
  3. 定义工程,Maven 对所有的工程管理基于坐标进行管理 , 填入 Group Id , Atrifact Id , 选择Finish.

名词解释

  • Group Id : 项目名称, 名称名以域名倒序,不如.com.baidu.mevendemo
  • Artifact Id :模块名称(子项目名称)
  • Version : 模块的版本, shapshot(快照版,没有正式发行),release(正式发行版本)
  1. 输入 Finish 后进如下图
img

<font color=red size=4>目录结构说明</font>

  • project
    • /src/main/java 主体程序java源文件(不要方配置文件)
    • /src/main/resources 主体程序所需要的配置文件(不要方java文件)
    • /src/test/java 单元测试java源文件
    • /src/test/resource 单元测试程序所用的配置文件
    • /target 编译输出目录
    • pom.xml Maven 进行工作的主要配置文件
  1. 编写代码

5.1 在src/main/java 目录下创建包 com.zyw.mavendemo
5.2 在包com/zyw/mavendemo 下创建HelloWorld类

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World!!");
    }
}

3.2 设置编译版本

 1. 我们现在在Maven工程默认是JDK1.5 , 我们需要将编译版本该为系统对应的JDK(我的系统是1.7)

<font color=red size=4>将下面的信息黏贴到pom.xml中</font>

<build>  
      <plugins>
          <plugin>  
              <groupId>org.apache.maven.plugins</groupId>  
              <artifactId>maven-compiler-plugin</artifactId>  
              <version>2.3.2</version>  
              <configuration>  
                  <source>1.7</source>  
                  <target>1.7</target>  
              </configuration>  
          </plugin>  
      </plugins>  
   </build>  
  1. 右键工程 Maven → Update Project...
    弹出窗口后,我们的编译版本就改位1.7了.

4. 添加依赖

  1. 右键工程 → Maven → Add Dependency 打开 Add Dependency 窗口
  2. 在 Enter groupId,atrifactid or sh1 .... 下方输入需要依赖的库. 选择好后 点击 "OK" 按钮.
  3. 这时我们发现pom.xml ,多了一下信息(你选择的是什么jar包就出先什么样的信息)
  <dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.0.7.Final</version>
    </dependency>
  </dependencies>
  1. 工程目录下的Maven Dependecies 下多了很多的jar包,因为我们依赖的jar包可能还需要依赖别的包才可以运行.

4 项目的生命周期

 Maven有三套相互独立的生命周期,分别是:clean,default,site. clean主要是情路项目. default是Maven最核心的构建项目,site 是生成项目站点. 每一个大的生命周期又分为很多个杰顿. 后面的阶段依赖与前面的激阶段,这点有点项Ant的构建依赖,声明周期本身相互独立,用户可以仅仅调用声明周期的某一个阶段,也就是说用户调用了default周期的任何节点,并不会触发clean周期一级site周期的任何事情. 三大生命周期蕴含着小小的阶段. 如下图所示.

img

4.1 clean周期

  • pre-clean:准备清理
  • clean:真正的清理工作
  • post-clean:执行清理后的一些后续工作

4.2 default 周期

  • validate:验证
  • initialize:初始化配置
  • generate-sources:生成源代码编译目录
  • process-sources:处理项目主资源文件,复制资源文件到output- classpath
    generate-resources:生成资源目录
  • process-resources:处理资源文件
  • complie:编译源代码
    process-classes:处理编译后文件
  • generate-test-sources:生成测试目录
  • process-test-sources:处理项目测试资源文件,复制测试资源文件到outputclasspath
  • generate-test-resources:生成测试资源文件
  • process-test-resources:处理测试资源文件
  • test-compile:编译测试代码
  • process-test-classes:处理测试代码
  • test:单元测试运行测试代码
  • prepare-package:打包前的准备
  • package:将编译好的代码打包成为jar或者war或者ear等等
  • pre-integration-test:准备整体测试
  • integration-test:整体测试
  • post-integration-test:为整体测试收尾
  • verify:验证
  • install:安装到本地Maven库
  • deploy:将最终包部署到远程Maven仓库

4.3 site 周期

  • pre-site:准备生成站点
  • site:生成站点及文档
  • post-site:站点收尾
  • site-deploy:将生成的站点发布到服务器上

5. 常见命令

Maven通过命令对工程进行清理,编译测试,打包,部署.

  1. 右键工程 Run As(或Debug As) → Maven Build... 进入Edit Configuation 窗口
  2. 在Goals 中输入命令 点击"Run" 按钮

<font color=red size=4>常见命令</font>

  • compile:编译
  • clean:清理,将target下的class文件清理
  • test: 执行单元测试类,执行src/test/java下的类
  • package :将java工程打成jar、war。
  • install:安装命令,将将程的jar发布到本地仓库
    发布到仓库,目录按照本工程定义的坐标生成目录

4,创建SSH工程

详见 Maven创建SSH工程

5,聚合与继承

聚合

 随着技术的发展和各类用户对软件的要求越来越高,软件本身也变得越来月复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构,分模块开发,来提高代码的清晰和重用.针对这以特性,maven也给予了相应的配置.

 我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven Project , 在开始的时候我们可以 独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂 化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式.

 所谓聚合,顾名思义,就是把多个模块项目聚合到一起,我们可以建立一个专门负责聚合工作的Maven工程.

  建立该project的时候需要注意一下几个点:

  1. 聚合模块本身也作为要给Maven项目,它必须有自己的POM.
  2. 它的打包方式必须为:pom
  3. 引入了新的元素:modules--module
  4. 版本:聚合模块的版本和被聚合模块版本一致.
  5. 相对目录:每个module的值都是一个当前POM的相对目录.
  6. 目录名称:为了方便的快速定位内容,模块所处的目录应当与artifactId一致(Maven约定而不是硬件要求),总之,模块所处的目录必须和<module>模块所处的目录</module>相一致.
  7. 习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层,其它聚合模块作为子目录存在,这样当我们打开项目的时候,第一个看到的就是聚合模块的POM.
  8. 聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/java , src/test/java 等目录,因为它指示用来帮助其它模块构建的工具,本身并没有实质的内容.
  9. 聚合模块和子模块的目录:他们可以是父子类,也可以是平台结构,当然如何使用平行结构,那么聚合模块的POM也需要做出相应的更改.

二,继承

 我们在项目开发过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每一个模块都需要Junit,使用spring的时候,器核心jar也必须都被引用,在编译的时候,maven-compiler-plugin 插件也要被引入.这时我们采用继承,就不用在每个子模块分别定义了.

如何配置继承:

  1. 说到继承肯定是一个父子结构,那么我们在父工程中来创建一个parent project .
  2. <packaging>: 作为父模块的POM,其打包类型也必须为POM.
  3. 结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java , src/test/java 等目录.
  4. 新的元素<parent> , 它是被用在子模块中的.
  5. <parent>元素属性:<relativePath>:表示父模块POM的相对路径,在构建时候,Maven会先根据relativePath检查父POM,如果找不到,再从本地仓库查找
  6. relativePath的默认值../pom.xml
  7. 子模块省略groupId和version:使用了继承的子模块中可以不声明groupId和version,子模块将隐式的继承父模块的这两个元素.

三,聚合与继承的区别

img

 聚合和继承通常是集合使用的,但是其作用是不同的.聚合是将多个模块的工程聚合在一起,而继承则是指明某个模块工程哟啊继承另一个模块功能.

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

推荐阅读更多精彩内容

  • Maven入门教程 1.1.介绍、环境配置 1.1.1.Maven介绍 Maven是一个采用纯Java编写的开源项...
    安易学车阅读 1,452评论 2 10
  • 导语 最近在学习Java了,以后分享的文章主要就以Java为主了,偶尔也会分享一下Objective-C方面的文章...
    国士无双A阅读 11,722评论 0 24
  • Maven 简介 Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一...
    GavinHacker阅读 3,005评论 0 6
  • 一、MAVEN能做什么? 清理项目 mvn clean 编译项目 mvn compiler 测试项目 mvn...
    sunshine9223阅读 704评论 1 3
  • 上个世纪末参加工作,晃晃悠悠也快20年了。遥想当年,意气风发,总觉得自己写的软件能够影响一些人,为社会创造一些价值...
    光行天下阅读 287评论 1 1