是什么

1. maven是一款服务于java平台的自动化构建工具

 Maek -> Ant -> Maven -> Gradle

2. 构建

 编译 -> 部署 ->  搭建

Ⅰ. 一个BS项目最终运行的并不是动态Web工程本身,而是该工程'编译的结果'。

 所以,开发过程中,所有的路径或配置文件中配置的类路径(classes)都是以编译结果的目录结构为标准。

Ⅱ. 构建过程

 Ⅰ.清理:删除上次编译后的就class字节码文件

 Ⅱ.编译:将java源代码转为class字节码文件

 Ⅲ.测试:自动测试,自动调用junit程序

 Ⅳ.报告:测试程序执行的结构

 Ⅴ.打包:动态Web程序打成war包,Java工程打成jar包

 Ⅵ.安装:将打包后的文件复制到“仓库”中指定位置

 Ⅶ.部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行

安装Maven1. 安装java环境

 由于maven是java开发的

2. 下载安装mavaen

历史版本下载:http://archive.apache.org/dist/maven/maven-3/3.5.3/binaries/

 只需要替换想要的版本号即可

4. 配置maven环境变量

 M2_HOME:安装路径

 path:%M2_HOME%\bin

5. 验证

 mvn -v查看Maven版本信息

仓库
  • 本地仓库:当前本机电脑的maven仓库
  • 远程仓库:
  • 私服:架设在当前局域网环境下,为当前局域网范围内的所有用户提供服务
  • 中央仓库:架设在Internet上,为全世界所有Maven使用者服务
  • 中央仓库的镜像:架设在各大洲,为中央仓库分流。减轻中央仓库的压力,同时能更快的响应用户请求
  • 仓库中保存的内容
  • Maven自身所需要的插件
  • 第三方框架或工具的jar包
  • 自己开发的maven工程
  • 配置阿里云镜像仓库
<!--在setttins.xml文件中找到<mirrors></mirrors>标签对,进行修改-->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
常用命令

执行与构建过程相关的maven命令,必须进入pom.xml文件所在的目录

  • 命令
  • mvn clean:清理
  • mvn compile:编译主程序
  • mvn test-compile:编译测试程序
  • mvn test:执行测试
  • mvn package:打包
  • mvn install:安装
约定的目录结构
1. maven项目必须遵循的项目目录结构,才能实现自动化
		项目名
			src
				main
					java
					resources
				test
					java
					resources
			pom.xml
2. 约定(架构) > 配置(框架) > 编码
POM

Project Object Model 项目对象模型

坐标

Maven使用三个向量在仓库中定义唯一的工程

  • 三个向量
  • groupid:公司或组织域名倒叙
  • artifactid:模块名
  • version:版本
<groupId></groupId>
<artifactId></artifactId>
<version></version>
依赖
  • maven解析依赖信息时会去本地仓库中查找被依赖的jar包
  • 自己开发的maven工程,需要执行mvn install命令安装到仓库后才可被别的工程依赖
  • 依赖范围(scope)

compile

test

provided

对主程序是否有效

☑️


☑️

对测试程序是否有效

☑️

☑️

☑️

是否参与打包

☑️



  • provided的包在部署环境不再需要,由tomcat等容器提供。如:servlet-api.jar等
  • 依赖传递性
  • 依赖具有传递性,底层工程加入的包,所有依赖该工程的工程也会被加入该包
  • 注意:非compile范围的依赖不能传递
  • 传递原则:路径最短优先,
  • 当有依赖冲突时会最先选择依赖路径最短的包
  • 工程自身配置的依赖优先级最高
  • 直接依赖的传递依赖次之
  • 传递依赖的依赖优先级最低
  • 当有路径相同的冲突依赖时,依赖标签最先声明的优先
  • 依赖的排除
  • 排除dependency直接依赖里传递的其他某个依赖
<dependencies>
	<dependency>
        <goupId></goupId>
        <artifactId>直接依赖</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
    	<exclusions>
            <exclusion>
                <groupId></groupId>
                <artifactId>排除直接依赖中依赖的某个别的依赖</artifactId>
            </exclusion>
   	 	</exclusions>
    </dependency>
</dependencies>
  • 依赖统一管理
  • 使用properties标签自定义统一标签
  • 使用${自定义标签}引用声明
<properties>
	<自定义标签>1.0.0.RELAEASE</自定义标签>
</properties>
继承
  • 统一管理各个模块工程中某个依赖的版本
    父工程中统一设定依赖的版本号,子工程中声明该依赖时不再指定版本
  • 父工程的打包方式为:pom
<packaging>pom</packaging>
jar为java程序
war为web程序
  • 父工程中配置依赖的管理
// 父工程坐标
<groupId>父工程域名</groupId>
<artifactId>父工程名</artifactId>
<version>1.0.0-SNAPSHOT</version>
// 父工程打包方式
<packaging>pom</packaging>

// 父工程依赖管理
<dependencyManagement>
	<dependencies>
        // 父工程统一管理的依赖,父工程并不会真正去加载该依赖
    	<dependency>
        	<groupId>junit</groupId>
            <artifactId>junit</artifactId>
        	<version>4.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 子工程只需声明groupId、artifactId,不再声明version。统一使用父工程指定的版本
  • 子工程引入父工程
// 子工程引入父工程
<parent>
	<groupId>父工程域名</groupId>
    <artifactId>父工程名</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    #以当前文件为基本的父工程pom文件的相对路径
    <relativePath>../父工程项目名/pom.xml</relativePath>
</parent>

<dependencies>
        // 子工程依赖,不再指定版本
    	<dependency>
        	<groupId>junit</groupId>
            <artifactId>junit</artifactId>    	
            <scope>test</scope>
        </dependency>
</dependencies>
  • 配置继承后,install时需要先安装父工程,再安装子工程
聚合
  • 目的:为了一键自动安装整个项目的父子工程
  • 集合后只需要在父工程instaill,maven会自动按继承关系将整个项目顺序进行install
<!-- 父工程中配置聚合工程 -->
<modules>
    <!-- 指定需要聚合的所有子工程。子工程的依赖继承顺序无所谓,maven会自动识别关系。-->
	<module>../子工程1</module>
    <module>../子工程2</module>
</modules>
自动构建
<!-- 配置当前工程构建过程中的特殊设置 -->
<build>
    <!-- 工程打包的最终名称 -->
    <finalName></finalName>
    <!-- 配置当前工程构建过程需要使用的插件 -->
	<plugins>
    	<plugin>
        	<groupId>插件包</groupId>
    		<artifactId>插件名</artifactId>
   			<version>插件版本</version>
        </plugin>
    </plugins>
</build>
打包自定义工具pom依赖
1. 先将自定义工具项目打包为jar文件
2. 执行mvn install命令生成pom
mvn install:install-file -DgroupId=com.wangl.util -DartifactId=export -Dversion=1.0.0 -Dfile=E:\export\target\export-1.0-SNAPSHOT.jar -Dpackaging=jar
3. 命令详解
mvn install:install-file
     -DgroupId=com.wangl.util     		#这个是引用的包名 ,相当于 groupId
     -DartifactId=export            	#这个是引用的名称 ,相当于 artifactId
     -Dversion=1.0.0                    #这个是引用的版本,相当于 version
     -Dfile=E:\export\com.xxx.jar 		#这个是jar包文件所在的位置
     -Dpackaging=jar                 	#这个是打包类型
4. maven项目依赖自定义工具,pom.xml文件引用如下
	<dependencies>
	  	<dependency>
	  		<groupId>com.wangl.util</groupId>
	  		<artifactId>export</artifactId>
	  		<version>1.0.0</version>
	  	</dependency>
  </dependencies>