天天看点

Maven基础知识小结。未完待续 。。。。

什么是Maven?

Maven 译 ‘专家,行家’, 又是apache下的一个开源项目,相比于SVN(版本控制器)不同,他是一款项目管理工具,Maven也是由java编写,所以同样具有跨平台的特点,当然也就需要有JDK的环境支持.

Maven的作用

  • (1) 进行项目构建

    ①高度自动化,跨平台,标准化的 只有遵守规范才能得到推广

  • (2 依赖jar包管理

    ①开发一款项目不得不依赖第三方的jar包

  • (3) 依赖信息管理

    ①自动生成项目信息

为什么要使用Maven

  • 在原先的项目中,如果需要用到第三方的jar包,必须有开发人员手动去网上下载(这就会导致每个人下载的版本不同,内容也可能不同),然后手动在 复制,粘贴到 WEB-INF/lib 下,而且是每一个项目都需要这样,这样导致带来了:同样的jar出现在不同的工程中,浪费存储空间,工程臃肿,而Maven就可以很好的解决这一问题,通过在pom.xml(POM 项目对象模型,可类比之前学过的DOM对象模型,这里存放工程的核心配置)文件中添加依赖引用仓库中的jar来解决;
  • Maven之所以能够得到推广,就是因为有一套规范,从中央仓库下载到本地仓库的jar都是统一规范的,这样就不会存在项目工程之间jar包冲突的问题。
  • jar包之间的依赖管理会由Maven自动导入,比如 commons-fileupload.jar --> commons-io.jar在导入commons-fileupload.jar时,maven会帮我们自动导入commons-io.jar(这个我试的时候只有高版本的jar会自动导入)
  • 拥有生命周期(核心),简化操作,高度自动化的体现。

Maven仓库

  • 本地仓库
  • 远程仓库

    中央仓库

    镜像仓库

    私服

    大小排序: 中央>镜像>私服>本地

    访问速度排序:本地> 私服> 镜像 >中央

本地仓库位置

默认位置: ~/.m2/repository/

自定义位置:maven的本地仓库配置到指定的路径下,方便管理。在文件conf–>settings.xml 下修改< localRepository >新的仓库路径< /localRepository >

Maven的目录结构

Maven基础知识小结。未完待续 。。。。

Maven 的生命周期

Maven有三套相互独立的声明周期

  • Clean LifeCycle

    进行真正构件之前进行一些清理工作

  • Default LifeCycle

    构件的核心部分,编译,测试,打包,部署等等

  • Site LifeCycle

    生成项目报告,站点。

主要说一下Default 生命周期

Maven基础知识小结。未完待续 。。。。

其中选中的就是我们经常用到的阶段,下面就以一个例子说明:

用Maven输出HelloWorld!

注意: 执行mvn: 必须在pom.xml所在目录中执行

按照Maven规范目录将HelloWorld.java 和testHelloWprld.java放在正确的文件夹下,然后从Dos命令里面进入Maven项目:

mvn compile --只编译main目录中的java文件 ,编译结束后会生成一个target文件,存 放.class (第一次执行命令时,因为需要下载执行该命令的基础环境,所以会从中央仓库下载该环境到本地仓库,时间很长,耐心等待,不要放弃)

Maven基础知识小结。未完待续 。。。。

mvn test 测试 同样也需要下载各种插件,生成.testClass文件

Maven基础知识小结。未完待续 。。。。

mvn package 打成jar/war前提是:前面的步骤必须是成功的,(生命周期)

Maven基础知识小结。未完待续 。。。。
Maven基础知识小结。未完待续 。。。。
Maven基础知识小结。未完待续 。。。。

mvn install 将开发的模块 放入本地仓库,供其他模块使用 (放入的位置 是通过gav决定)

Maven基础知识小结。未完待续 。。。。
Maven基础知识小结。未完待续 。。。。

mvn clean 删除target目录(删除编译文件的目录) 该命令既是最后一步,也是第一步。

Maven基础知识小结。未完待续 。。。。

mvn deploy 该命令是将项目发布到私服上,供所有局域网的人使用,但前提是必须配置好私服,这里就不做展示了。

Maven 命令之所以能运行是因为有下面插件的支持。

Maven基础知识小结。未完待续 。。。。

Maven的依赖管理

依赖原则:为了防止冲突

a.路径最短优先原则(很好理解,谁买东西会舍近求远呢?)

b.路径长度相同:

i.在同一个pom.xml文件中有2个相同的依赖(覆盖):后面声明的依赖 会覆盖前面声明的依赖 (严禁使用本情况,严禁在同一个pom中声明两个版本不同的依赖)

ii.如果是不同的 pom.xml中有2个相同的依赖(优先):则先声明的依赖 ,会覆盖后声明的依赖

依赖管理的自动导入
Maven基础知识小结。未完待续 。。。。
Maven基础知识小结。未完待续 。。。。

依赖长度相同:

在Maven_HelloTime下查看pom.xml

Maven基础知识小结。未完待续 。。。。
Maven基础知识小结。未完待续 。。。。

有些人奇怪的是 pom.xml中就没没有依赖junit的jar啊,为什么会导入呢???

这就是依赖传递的范围scope,只有当scope为compile时,传递依赖才会生效

Maven基础知识小结。未完待续 。。。。

Maven的继承

  • 统一管理版本
  • 消除重复

继承实现步骤:

1.建立父工程: 父工程的打包方式为 pom

2.在父工程的pom.xml中编写依赖:

< dependencyManagement >

< dependencies >

< dependency >

3.子类:

< !-- 给当前工程 继承一个父工程:

1加入父工程坐标gav

2当前工程的Pom.xml到父工程的Pom.xml之间的 相对路径

–>

< parent>
 	  <groupId>org.rjxy.maven</groupId>
	  <artifactId>B</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <relativePath>../B/pom.xml</relativePath>
 </parent>
           

4.在子类中 需要声明 :使用那些父类的依赖

<!-- 声明:需要使用到父类的junit (只需要ga) -->
 <dependency>
        <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
</dependency>
           

Maven的聚合

使用聚合的原因

比如 Maven2 依赖于 Maven1,则在执行时:必须先将 Maven1 先加入到本地仓库(install),之后才能执行Maven2,这点不符合Maven高度自动化的特点。

以上 前置工程的install操作,可以交由“聚合” 一次性搞定 一键安装各个模块到本地仓库。。。

聚合的使用

Maven基础知识小结。未完待续 。。。。

聚合的配置

聚合的配置 只能配置在(打包方式为pom)的Maven工程中

未完待续 。。。。