maven的相关讲解和基础操作

1. 为什么要使用maven?

  ①粘贴jar包的问题

    [1]每一个工程都需要重复复制jar包

    [2]协同开发,不同开发人员导入的jar包如果不一致会造成冲突

      小明:4.0.0-Spring

      小刚:4.1.1-Spring

Maven的解决方案:在所有工程中都加入jar包的引用,jar包本身在仓库中只有一份。各个工程引用的是同一个jar包,不容易产生不一致的问题。

 

  ②jar包是从哪来的呢?

    [1]官网下载

    [2]官方提供jar包有的时候就是通过Maven或SVN、Git等工具进行下载的

    [3]国内社区:CSDN、ITEye、51Cto……

    [4]以不规范的方式得到的jar包往往也是不规范的

Maven的解决方案:根据“依赖信息”自动从Maven中央仓库下载jar包。以规范的方式下载的jar包也一定是规范的。

根据关键词搜索依赖信息的网站:http://mvnrepository.com

 

  ③jar包之间的依赖

    [1]使用commons-fileupload组件,必须同时导入commons-io

    [2]使用Spring的IOC容器相关jar包,必须同时导入commons-logging

        ……

Maven的解决办法:会自动将所有jar包依赖的其他jar包导入到工程中。

 

  ④项目与工程

    [1]目前:一个项目就是一个Web工程

    [2]实际生产环境下:一个项目由多个工程组成,工程之间通过Maven依赖关系联系到一起

 

●结论:Maven是必须要使用的!

 

2.什么是Maven?

①Maven是一款工作在Java平台上的自动化构建工具。

②构建工具的发展历程

Make→Ant(Another Neal Tools)→Maven→Gradle……

③构建:使用原材料生产产品的过程。

[1]原材料:Java源程序、配置文件、JSP文件、静态资源、资源文件……

[2]产品:一个可以在服务器端运行的项目

④构建过程的各个环节

[1]清理:删除旧的编译结果

[2]编译:将Java源程序编程成.class字节码文件

[3]测试:自动测试

[4]报告:自动测试的结果

[5]打包:Java工程生成jar包,Web工程生成war包

[6]安装:将Java工程放置到Maven仓库的指定目录下

[7]部署:将Web工程放置到Servlet容器的指定目录下,并启动服务器,使项目可以被访问

 

3.使用Maven

①安装Maven核心程序

[1]确认当前系统环境中正确配置了JAVA_HOME

C:\Windows\System32>echo %JAVA_HOME%

D:\DevInstall\Java\jdk1.8.0_111

[2]解压“Maven核心程序.zip”到一个非中文没有空格的目录下

D:\DevInstall\apache-maven-3.2.2

[3]配置path环境变量

D:\DevInstall\apache-maven-3.2.2\bin

[4]配置MAVEN_HOME环境变量

D:\DevInstall\apache-maven-3.2.2

[5]验证

C:\Users\Creathin>mvn -v

Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)

Maven home: D:\DevInstall\apache-maven-3.2.2\bin\..

Java version: 1.8.0_111, vendor: Oracle Corporation

Java home: D:\DevInstall\Java\jdk1.8.0_111\jre

Default locale: zh_CN, platform encoding: GBK

OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

 

②常用Maven命令

编译:mvn compile

测试:mvn test

清理:mvn clean

打包:mvn package

安装:mvn install

 

注意:在命令行窗口中执行Maven命令一定要进入到pom.xml所在的目录

 

③Maven联网的问题

[1]Maven为什么有很多东西要下载?

Maven的核心程序中仅定义了抽象的生命周期,具体的工作都需要由插件来完成。而插件并不包含在Maven核心程序中。

[2]Maven到哪里查找需要的插件?

首先在默认的本地仓库中查找。

Default: ${user.home}/.m2/repository

${user.home}表示登录当前系统的用户的家目录

如果本地仓库中没有需要的插件,那么就连外网下载

下载下来以后,就自动保存到本地仓库中,以后再需要使用时就不用重新下载了

如果下载过程中联网失败,无法获取到需要的插件,那么构建将会失败

[3]能否避免大部分jar包的加载?可以,使用一个已经准备好的仓库即可

解压压缩包:Maven仓库.zip

修改本地仓库的路径:找到conf/settings.xml文件,修改localRepository标签的值

<localRepository>D:\RepMaven</localRepository>

 

4.POM

①含义:Project Object Model 项目对象模型

DOM 文档对象模型

②作用:对当前Maven工程的构建方式进行详细配置。重要性相当于web.xml对于动态Web工程的意义。

 

5.约定的目录结构

①意义:自动化构建的必然要求。以编译为例,如果Maven不知道目标Java源程序的位置就无法执行编译。

②让框架或第三方工具找到我们自定义的资源,那么无非有两种方式

[1]以配置的方式明确告诉它

<init-param>

     <param-name>contextConfigLocation</param-name>

     <param-value>spring-mvc.xml</param-value>

</init-param>

[2]遵循它的约定

log4j.xml/log4j.properties

③约定的目录结构含义

[1]src:存放源代码文件和配置文件

[2]main:存放主程序的相关资源

[3]test:存放测试程序的相关资源

[4]java:存放.java源程序文件

[5]resources:存放配置文件

 

6.仓库

①Maven的仓库分类

[1]本地仓库

[2]远程仓库

(1)私服:架设在局域网环境中,为局域网环境内的Maven工程服务

(2)中央仓库:为全世界所有Maven工程服务

(3)镜像服务器:为了分担中央仓库的访问压力,内容和中央仓库完全一样

②仓库中保存的Maven工程分类

[1]Maven自身需要使用的插件

[2]程序员自己开发的Maven工程

[3]第三方框架或工具的jar包

③结论:不管是上述哪一种类型的jar包,在Maven的仓库中都是按照同样的方式进行管理的,Maven提供了一种管理jar包的统一规范。

 

7.坐标

①数学中的概念

[1]在平面内,使用x、y两个向量,可以定位到平面内的任何一个点

[2]在空间中,使用x、y、z三个向量,可以定位空间中的任何一个点

②Maven的坐标

使用groupId、artifactId、version三个向量,在仓库中唯一定位一个Maven工程

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>4.0.0.RELEASE</version>

 

[1]groupId:公司或组织域名倒序+项目名

<groupId>org.springframework</groupId>

 

[2]artifactId:模块名称

<artifactId>spring-core</artifactId>

 

[3]version:版本号

<version>4.0.0.RELEASE</version>

 

Tips:版本号

RELEASE:正式版

SNAPSHOT:快照,一般不太稳定

 

③根据任何一个Maven工程的坐标生成对应jar包在仓库中的路径

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>4.0.0.RELEASE</version>

路径:Maven仓库根目录/org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar

 

④用途:在A工程中需要引用B工程时,使用B工程的坐标来进行定位。

 

8.依赖★

①HelloFriend会到本地仓库中查找依赖的Hello。

②依赖的范围

[1]scope标签的可选值

compile[默认值]

test

provided

……

[2]compile和test对比

(1)在test目录下的代码中可用使用以test范围引入的依赖,在main目录下不可以使用

(2)在main和test目录下都可用使用以compile范围引入的依赖

[3]compile和provided对比

provided范围的依赖通常用来导入服务器能够提供但是开发过程中没有的jar包。

③依赖的传递

[1]compile范围的依赖可以传递

[2]非compile范围的依赖不可以传递,所以用到非compile范围依赖的工程都需要单独专门导入才行

④依赖的排除

[1]应用的场合:要使用A jar包,但是又不想引入A依赖的其他jar包。

[2]排除前举例

[3]排除后举例

[4]排除的配置方式

<exclusions>

     <exclusion>

          <groupId>commons-logging</groupId>

          <artifactId>commons-logging</artifactId>

     </exclusion>

</exclusions>

 

 

9.生命周期

①概念:构建过程中各个环节执行的顺序。

②Maven中的三个内置生命周期

[1]Clean

[2]Site

[3]Default

③执行的特点:不管用户下达的是什么命令,Maven都是从当前生命周期最初的位置开始执行,直到完成命令的任务。也就是说:每一个Maven命令都会将当前生命周期中前面的各个环节执行到。

mvn compile

maven-resources-plugin:2.6:resources

maven-compiler-plugin:2.5.1:compile

mvn test-compile

maven-resources-plugin:2.6:resources

maven-compiler-plugin:2.5.1:compile

maven-resources-plugin:2.6:testResources

maven-compiler-plugin:2.5.1:testCompile

mvn test

maven-resources-plugin:2.6:resources

maven-compiler-plugin:2.5.1:compile

maven-resources-plugin:2.6:testResources

maven-compiler-plugin:2.5.1:testCompile

maven-surefire-plugin:2.12.4:test

测试报告

mvn package

……

mvn install

④生命周期每次都从最初的位置开始执行是自动化构建的一个重要保证。

 

10.插件和目标

①生命周期中仅定义了抽象的构建环节,具体的构建任务是由具体的插件来完成的。

②生命周期中的每一个环节都和某个插件的目标相对应。

生命周期环节

插件目标

插件

compile

compile

maven-compiler-plugin

test-compile

testCompile

maven-compiler-plugin

 

11.在Eclipse中使用Maven

①Maven插件:从Kepler版本开始Eclipse内置了Maven插件。

②Maven插件的设置

[1]指定Maven核心程序的解压目录

[2]指定conf/settings.xml文件的位置

③创建Maven工程

[1]Java工程

[2]Web工程

※注意:Tomcat已经提供的jar包在使用时要通过provided范围引入。例如:servlet-api和jsp-api

④运行时环境

任何API,只要不是自己编写的,都必须在某一个运行时环境中才可以使用,否则就会报“Cannot be resolve to a type”错误。

Tips:tc_server插件使用方式

直接复制到Eclipse解压目录下的dropins目录下,重启Eclipse即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值