maven 介绍

maven 介绍

一、maven简介

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。maven是基于Ant 的构建工具,Ant 有的功能Maven 都有,额外添加了其他功能.

  1. 版本:maven有自己的版本定义和规则
  2. 构建:可以完成编译,打包,部署等。
  3. 依赖管理:方便引入所需依赖 Jar 包,不需手动下载
  4. 文档生成:maven的site命令支持各种文档信息的发布,包括构建过程的各种输出,javadoc,产品文档等。
  5. 项目关系:一个大型的项目通常有几个小项目或者模块组成,用maven可以很方便地管理

二、maven生命周期

  1. 验证(validate):验证项目是否正确
  2. 编译(compile): 编译项目的源代码
  3. 测试(test):使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署
  4. 打包(package)
  5. 验证(verify)
  6. 安装(install)
  7. 部署(deploy)

maven中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后maven执行的时候,就依照过程的发展依次调用这些goal进行各种处理。这个也是maven的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven同样提供了配置文件,可以依照用户要求,跳过某些阶段。

lifecycle:生命周期,这是maven最高级别的的控制单元,它是一系列的phase组成,也就是说,一个生命周期,就是一个大任务的总称,不管它里面分成多少个子任务,反正就是运行一个lifecycle,就是交待了一个任务,运行完后,就得到了一个结果,中间的过程,是phase完成的。

phase:可以理解为任务单元,lifecycle是总任务,phase就是总任务分出来的一个个子任务,但是这些子任务是被规格化的,它可以同时被多个lifecycle所包含,一个lifecycle可以包含任意个phase,phase的执行是按顺序的,一个phase可以绑定很多个goal,至少为一个,没有goal的phase是没有意义的

goal: 这是执行任务的最小单元,它可以绑定到任意个phase中,一个phase有一个或多个goal,goal也是按顺序执行的,一个phase被执行时,绑定到phase里的goal会按绑定的时间被顺序执行。

mojo: lifecycle与phase与goal都是概念上的东西,mojo才是做具体事情的,可以简单理解mojo为goal的实现类,它继承于AbstractMojo,有一个execute方法,goal等的定义都是通过在mojo里定义一些注释的anotation来实现的,maven会在打包时,自动根据这些anotation生成一些xml文件,放在plugin的jar包里

三、maven仓库概念

用过maven的同学,都知道maven可以通过pom.xml中的配置,就能够获取到想要的jar包,但是这些jar是在哪里呢?就是我们从哪里获取到的这些jar包?答案就是仓库。仓库分为:本地仓库,第三方仓库(私服),中央仓库

1. 本地仓库

本地仓库:计算机中一个文件夹,自己定义是哪个文件夹.Maven会将工程中依赖的构件(Jar包)从远程下载到本机的该目录下进行管理。maven默认的仓库是$user.home/.m2/repository目录。本地仓库的位置可以在$MAVEN_HOME/conf/setting.xml文件中修改

在文件中找到localRepository目录,修改对应内容即可
<localRepository>D:/maven/r2/myrepository</localRepository>
2.中央仓库

中央仓库:网上地址https://repo1.maven.org/maven2/

这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。工程依赖的jar包如果本地仓库没有,默认从中央仓库下载。

由于maven的中央仓库在国外,所以下载速度比较慢,所以需要配置国内的镜像地址

在配置文件中找到mirror标签,添加以下内容即可。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
3. 第三方仓库(私服)

第三方仓库,又称为内部中心仓库,也称为私服。私服:一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率,公司单独开发的私有jar可放置到私服中。(使用私服为了减少对中央仓库的访问)

注意:连接私服,需要单独配置。如果没有配置私服,默认不使用

4. 运行原理

四、maven的版本规范

maven使用如下几个要素来唯一定位某一个jar:

  1. Group ID :公司名。公司域名倒着写

  2. Artifact ID:项目名

  3. Version: 版本

  • 发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。
  • maven在版本管理时候可以使用几个特殊的字符串 SNAPSHOT ,LATEST ,RELEASE 。比如"1.0-SNAPSHOT"。各个部分的含义和处理逻辑如下说明:
    • SNAPSHOT 正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个"SNAPSHOT"的标记。
    • LATEST 指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个snapshot版,具体看哪个时间最后。
    • RELEASE 指最后一个发布版。

五. maven 的插件机制

1. maven 默认插件

不配置Plugin时,Maven默认会使用以下插件。如果针对各个 plugin 有特殊配置的话,需要显示指定 plugin 和 属性配置。

<build>
    <!-- resources 是 maven-resources-plugin 的-->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <filtering>true</filtering> <!-- filtering 用来表示资源文件中的占位符是否需要被profiles中的属性动态替换,true为需要替换。 -->
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.dic</include>
                <include>**/*.txt</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>*.p12</include>
            </includes>
        </resource>
    </resources>



    <plugins>
        <!-- 
            maven-compiler-plugin编译源代码。
            指定maven编译的jdk版本,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 
            windows默认使用GBK编码,java项目经常编码为utf8,也需要在compiler插件中指出,否则中文乱码可能会出现编译错
        -->
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        
        <!--
            maven-resources-plugin用来处理资源文件,默认的主资源文件目录是src/main/resources。
        -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 常用插件
  • tomcat插件

tomcat插件有两种:tomcat-maven-plugin 和 tomcat7-maven-plugin,使用方式基本相同。

六、maven项目之间的关系

  1. 依赖关系
  • 标签把另一个项目的jar 引入到当过前项目
  • 自动下载另一个项目所依赖的其他项目
  1. 继承关系
  • 父项目是pom 类型
  • 子项目jar 或war,如果子项目还是其他项目的父项目,子项目也
    是pom 类型.
  • 有继承关系后,子项目中出现标签
  • 如果子项目和和与父项目相同,在子
    项目中可以不配置和
  • 父项目pom.xml 中是看不到有哪些子项目.在逻辑上具有父子
    项目关系.
	父项目
	<groupId>cn.zanezz.cn</groupId>
    <artifactId>demoparent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    子项目
    <parent>
        <artifactId>demoparent</artifactId>
        <groupId>cn.zanezz.cn</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>
    <artifactId>child2</artifactId>
  1. 聚合关系
  • 前提是继承关系.父项目会把子项目包含到父项目中.

  • 子项目的类型必须是Maven Module 而不是maven project

  • 新建聚合项目的子项目时, 点击父项目右键新建Maven
    Module

	子项目中的pom.xml
	<parent>
        <artifactId>demoparent</artifactId>
        <groupId>cn.zanezz.cn</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    父项目中的pom.xml
    <groupId>cn.zanezz.cn</groupId>
    <artifactId>demoparent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>child1</module>
        <module>child2</module>
    </modules>
  1. 聚合项目和继承项目区别
  • 在语意上聚合项目父项目和子项目关系性较强
  • 在语意上单纯继承项目父项目和子项目关系性较弱
  1. 父项目中可以有
  • 作用是声明可能使用到的所有的jar

  • 子项目中只需要有坐标的和,继承父项目。

  • 在父项目中的可以对所有版本号进行统一管理。

    父项目
    <properties>
    	<spring-version>4.1.6.RELEASE</spring-version>
    </properties>
    
    <dependencyManagement>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${spring-version}</version>
    		</dependency>
    	</dependencies>
    </dependencyManagement>
    
    子项目
    <dependencies>
    	<dependency>
    		<groupId>org.springframework</groupId>
    		<artifactId>spring-webmvc</artifactId>
    	</dependency>
    </dependencies>
    

    *idea 搭建聚合项目的具体步骤可参考这里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值