清楚认识Maven

一、什么是Maven?

官网描述:
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.

Maven 是一个软件(特别是Java软件)项目管理自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM) 概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

二、特点

1.基于项目对象模型的思想

maven将项目看做一个对象,将项目的相关信息封装为对象,便于操作和管理。

maven项目对象的部分基础属性:

① 项目坐标

项目坐标用来定位一个项目在仓库中的位置。包含groupId, artifactId, version。一个Maven坐标是一个地址。当一个项目通过依赖,插件或者父项目引用和另外一个项目关联的时候,Maven通过坐标来精确定位一个项目。

② 打包方式。

这个属性决定我们执行maven的package方法后,项目会被打包成什么文件。

③ 其他属性
如编码方式等。

④ 项目依赖列表。

这个属性的值是一个数组,里边有一些其他项目的坐标。

⑤ 构建插件列表。

这个属性是一个数组,定义项目需要的一些插件,比如源码打包工具、web容器。

maven项目对象的部分方法:

①mvn compile 编译项目

②mvn package 打包项目

③mvn clean 清除之前编译和打包产生的文件

④mvn install 将项目安装到本地仓库

⑤mvn test 运行测试代码

三、作用

1. 项目管理

  1. 项目信息管理
  2. 统一开发规范与工具
  3. 统一jar包管理

2. 自动构建

构建:从源码到成品(通常是jar包或war包的形式)的过程。
构建环节:

环节 功能
清理 将以前编译得到的class字节码文件删除,为下一次编译做准备
编译 将java源程序编程成class字节码文件
测试 自动测试,自动调用Junit程序
报告 测试程序执行的结果
打包 动态web工程打包war包,java工程打jar包
安装 将打包得到的文件复制到"仓库"中的指定位置
部署 将动态web工程生成的war包复制到servlet容器的指定目录下,使其可以运行

这些环节,maven都可以一个命令完成,即自动构建。

四、使用

1.下载

官网下载地址:http://maven.apache.org/download.cgi
选择 Binary zip 类型的版本
清楚认识Maven_第1张图片
下载完成后,解压。

2. 配置maven环境变量

在环境变量–>系统变量–>path中,加入maven安装目录下的bin目录路径。

测试安装成功:cmd中执行mvn -v
清楚认识Maven_第2张图片
出现maven版本信息,即为安装成功。

3. 修改配置文件

maven 以仓库的形式管理jar包,仓库分为中央仓库(浏览器可访问https://mvnrepository.com/),和本地仓库。

本地仓库方便离线使用,从中央仓库下载的jar包都会放到本地仓库。

maven默认本地仓库目录放在c盘,为了方便查看以及减少C盘负荷,我们需更改本地仓库位置:

  • 一般在maven安装目录旁边创建一个local文件夹

清楚认识Maven_第3张图片

  • 修改maven/conf/setting.xml配置文件,为了避免出错,修改前复制一个副本。
    清楚认识Maven_第4张图片
    在 Setings 便签里面添加一条:
D:\E\Maven\local

清楚认识Maven_第5张图片
在原文件中的 53 行有localRepository配置,但被注释掉了,我们可以将其复制到注释外面,然后修改其值。

  • 修改镜像
    修改mirrors,在标签下加入以下配置,启动阿里云的镜像
	 
      alimaven 
      aliyun maven 
      http://maven.aliyun.com/nexus/content/groups/public/ 
      central         
   	 

清楚认识Maven_第6张图片

4. 简单运行

mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.chinasofti.build -DartifactId=demo

创建一个maven项目,项目groupId 为com.chinasofti.build,artifactId为 demo。

mvn clean compile exec:java -Dexec.mainClass=“com.chinasofti.build.App”

编译项目(在编译前,需先清理项目)

最后的项目结构:
清楚认识Maven_第7张图片

src 下放的是源码
target 下放的是编译文件

五. 完整项目目录结构


清楚认识Maven_第8张图片
②、为什么 maven 工程的目录结构要这样呢?

1、Maven 要负责项目的自动化构建,以编译为例,Maven 要想自动进行编译,那么它必须知道 Java 的源文件保存在哪里,这样约定之后,不用我们手动指定位置,Maven 能知道位置,从而帮我们完成自动编译。

2、遵循 约定>>>配置>>>编码。即能进行配置的不要去编码指定,能事先约定规则的不要去进行配置。这样既减轻了劳动力,也能防止出错。

③、pom.xml 文件

Project Object Model 项目对象模型,Maven 的核心配置文件,pom.xml,与构建过程相关的一切设置都在这个文件中进行配置。

六、构建的生命周期

1. 概念?

maven对构建(build)的过程进行了抽象和定义,这个过程被称为构建的生命周期(lifecycle)。

生命周期(lifecycle)由多个阶段(phase)组成,每个阶段(phase)会挂接一到多个goal。

goal是maven里定义任务的最小单元,相当于ant里的target。 可以理解maven为一个插件的容器,每个插件绑定到某个goal执行。

2.生命周期内容

清楚认识Maven_第9张图片
清楚认识Maven_第10张图片
清楚认识Maven_第11张图片

七、坐标与依赖

1.坐标详解


	net.sf.json-lib
	json-lib
	2.4
	jar
	jdk15

标签 解释
dependency 表示要使用一个依赖
groupId 指定依赖的组织名
artifactId 指定依赖的项目名
version 指定依赖的版本名
type 指定依赖的类型
classifier 指定jdk版本

2. 依赖范围

  • compile:编译时依赖在所有阶段都可获得,这是默认值。
  • provided:提供的依赖范围用来编译应用程序,但无需部署。若你用到jdk或者应用服务器提供的JAR,则使用此范围,servlet APIs就属于这个依赖范围。测试时,此依赖范围也加入到classpath。
  • runtime:运行依赖范围在编译阶段是不需要的,只有在运行时需要,比如JDBC驱动程序。
  • test:测试范围依赖,仅在编译和运行单元测试时需要(比如Junit)。
  • system 本地依赖,不建议使用。(nexus)
    清楚认识Maven_第12张图片

3.依赖传递

Only compile and runtime scopes are transitive
A->B->C
简单传递依赖:A->C
A->B-C(0.1)
A->C(0.2)
最短路径优先原则: A->C(0.2)
A->B->C(0.1)
A->E->C(0.2)
第一声明优先原则:最终依赖C(0.1)

4.依赖归类

  
    2.5
  
  
      
        org.springframework
        spring-core
        ${spring.version}
      
   

5.依赖排除


       org.hibernate
       hibernate-validator
       4.3.1.Final
       
            
                slf4j-api
                org.slf4j
            
       


你可能感兴趣的:(工具)