小汤学编程之JavaEE学习day08——Maven

本文详细介绍了Maven的用途、安装步骤、工程结构、核心概念,包括依赖管理、生命周期、插件、仓库等内容,旨在帮助初学者理解并掌握Maven在JavaEE项目中的应用。

在这里插入图片描述
在这里插入图片描述

一、Maven介绍
1.什么是Maven     2.Maven的功能     3.什么是构建     4.项目的构建方式
二、Maven的安装
1.下载     2.安装     3.配置     4.修改Maven中央仓库地址
三、创建Maven工程
1.Maven工程结构     2.创建工程     3.Maven命令的使用
四、Maven核心概念
1.Maven坐标的组成     2.依赖管理     3.生命周期     4.插件     5.继承项目     6.聚合项目
五、Maven仓库
1.什么是Maven仓库     2.仓库的分类


一、Maven介绍

1.什么是Maven

Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进行管理的工具。

Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上。

2.Maven的功能
  • 管理依赖(即jar包)
  • 项目构建
3.什么是构建

在这里插入图片描述
一个项目的构建一般要经过以上六个步骤。

4.项目的构建方式
  • Eclipse构建
    使用eclipse进行项目构建,相对来说,步骤比较零散,不好操作。
  • Ant构建
    它是一个专门的项目构建工具,它可以通过一些配置来完成项目构建,这些配置要明确的告诉ant,源码包在哪?目标class文件应该存放在哪?资源文件应该在哪。
  • Maven构建
    它是一个项目管理工具,他也是一个项目构建工具,通过使用maven,可以对项目进行快速简单的构建,它不需要告诉maven很多信息,但是需要安装maven去的规范去进行代码的开发。也就是说maven是有约束的。


二、Maven的安装

1.下载

官网:http://maven.apache.org

2.安装
  • 第一步:配置maven的环境变量MAVEN_HOME
  • 第二步:配置maven的环境变量PATH
  • 第三步:测试maven是否安装成功,在系统命令行中执行命令:mvn –v
3.配置
  • 全局配置(默认)
    在maven安装目录的conf里面有一个settings.xml文件,这个文件就是maven的全局配置文件。
  • 用户配置
    用户配置文件的地址:~/.m2/settings.xml(如C:/Users/admin.m2/settings.xml),该文件默认是没有,没有的话则使用全局配置文件的配置,需要将全局配置文件拷贝一份到该目录下,才能让用户配置生效。

用户配置文件里,使用<localRepository>E:\repository</localRepository>为该用户指定本地仓库地址,若不指定默认为~/.m2/repository目录。

4.修改Maven中央仓库地址

在全局配置或用户配置的settings.xml文件内容加入如下代码即可:

<mirrors>
	<!-- 阿里云仓库 -->
	<mirror>
		<id>alimaven</id>
		<mirrorOf>central</mirrorOf>
		<name>aliyun maven</name>
		<url>https://maven.aliyun.com/repository/central</url>
	</mirror>
	
	<!-- 中央仓库1 -->
	<mirror>
		<id>repo1</id>
		<mirrorOf>central</mirrorOf>
		<name>Human Readable Name for this Mirror.</name>
		<url>http://repo1.maven.org/maven2/</url>
	</mirror>
</mirrors>


三、创建Maven工程

1.Maven工程结构

下面是两种常见的Maven工程结构:

Java工程

在这里插入图片描述

web工程

在这里插入图片描述

2.创建工程
使用命令行创建
  • 创建Java工程
mvn archetype:generate -DgroupId=包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-quickstart
  • 创建web工程
mvn archetype:generate -DgroupId=包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-webapp
使用Idea创建

File->New->Project->Maven->选择模板
在这里插入图片描述

3.Maven命令的使用
代码命令说明
Maven compile编译命令重新编译
Maven clean清楚命令清除已经编译好的class文件,具体说清除的是target目录中的文件
Maven test测试命令该命令会将test目录中的源码进行编译
Maven package打包命令重新打包
Maven install安装命令会将打好的包,安装到本地仓库

组合命令:以上命令可以进行组合使用,如:
mvn clean compile
mvn clean test
mvn clean package
mvn clean install


四、Maven核心概念

1.Maven坐标的组成

Maven坐标是为了定位一个唯一确定的jar包或者项目模块。

  • groupId 定义当前Maven组织名称
  • artifactId 定义实际项目名称
  • version 定义当前项目的当前版本
    例如:
<!--  mysql  -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.37</version>
</dependency>
2.依赖管理
依赖范围

在这里插入图片描述
其中依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系。

  1. compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
  2. test:测试依赖范围。只对于测试classpath有效
  3. provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
  4. runtime:运行时提供。例如:jdbc驱动

如:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope><!-- 测试依赖范围 -->
</dependency>
依赖传递

假如有三个工程A、B、C,B依赖A,C依赖B,那么B是C的直接依赖,A是C的间接依赖。
在这里插入图片描述
依赖传递范围:
在这里插入图片描述

左边第一列表示第一直接依赖范围,
上面第一行表示第二直接依赖范围,
中间的交叉单元格表示传递性依赖范围。

总结:

  • 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
  • 当第二直接依赖的范围是test的时候,依赖不会得以传递。
  • 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
  • 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;
依赖冲突

在maven中存在两种冲突方式:

  • 一种是跨pom文件的冲突
    按照 就近原则。
  • 一种是同一个pom文件中的冲突
    下面依赖的覆盖上面的依赖。
可选依赖

<optional>true/false</optional>

Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。

排除依赖

Exclusions 标签可以排除依赖,格式如下:

<exclusions>
	<exclusion>
		<groupId></groupId>
		<artifactId></artifactId>
	</exclusion>
</exclusions>
3.生命周期

Maven有三个生命周期:

  1. clean生命周期
  2. default生命周期
  3. site生命周期

生命周期可以理解为项目构建的步骤集合。

生命周期是由多个阶段(Phase)组成。每个阶段都是一个完整的功能,比如mvn clean中的clean就是一个阶段。

clean生命周期
阶段说明
pre-clean执行一些需要在clean之前完成的工作
clean移除所有上一次构建生成的文件
post-clean执行一些需要在clean之后立刻完成的工作
mvn clean命令等同于mvn pre-clean clean

只要执行后面的命令,前面的命令都会执行,不需要再新去输入命令。这极大地简化了程序猿的操作。

default生命周期(重点)
default生命周期
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码(常用)
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试,这些测试代码不会被打包或部署(常用)
prepare-package
package 接收编译好的代码,打包成可发布的格式,如 JAR (常用)
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖(常用)
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享
site生命周期
site生命周期说明
pre-site执行一些需要在生成站点文档之前完成的工作
site生成项目的站点文档
post-site执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy将生成的站点文档部署到特定的服务器上
4.插件

每个插件(plugin)都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是由插件来实现的。
下面介绍两种常用的插件:

编译插件

我们常用的配置JDK版本的方式是在POM.xml的properties标签里设置:

<properties>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
</properties>

其实也可以使用编译插件来配置:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>       	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
		<source>1.8</source>
		<target>1.8</target>
		<encoding>utf-8</encoding>
	</configuration>
</plugin>
Tomcat插件

在命令行使用mvn tomcat:run命令可以使用tomcat插件来启动web工程,但默认版本为tomcat6。
我们一般在插件里进行如下配置:

<!--  Tomcat插件  -->
<plugin>
	<groupId>org.apache.tomcat.maven</groupId>
	<artifactId>tomcat7-maven-plugin</artifactId>
	<version>2.2</version>
</plugin>

这样可以使用tomcat7运行web工程,但命令要改为mvn tomcat7:run

5.继承项目

即父子项目,外层为父项目,里面又创建子项目。父项目的依赖可以被子项目继承。

6.聚合项目

外面一个大项目,里面分功能创建多个小项目,小项目之间可以是依赖的关系。聚合项目的优点是可以使代码各部分功能清晰划分,缺点使编写调试时重启太慢了。


五、Maven仓库

1.什么是Maven仓库

用来统一存储所有Maven共享构建的位置就是仓库。
根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:
groupId/artifactId/version/artifactId-version.packaging

2.仓库的分类
  • 本地仓库
    默认在~/.m2/repository,如果在用户配置中有配置,则以用户配置的地址为准。
  • 远程仓库
    部署在网上的其他人的仓库,比阿里的或者Maven官方自己的中央仓库。
  • 私服
    一般是部署在自己公司的服务器上,相当于将网上其他的中央仓库里的文件缓存在自己的服务器上,多人或者多次使用时可以极大的提高下载速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值