Maven基础知识

一、简介

1)Maven是Ant的升级版(Ant是Apache下的编译、打包工具);
2)Maven基于POM模型(Project Object Model 项目对象模型),可以实现项目对象之间的依赖、继承、聚合关系,方便项目之间的jar包管理;
3)它用来集中通过管理包的依赖,自动进行包重复、冲突问题解决;
4)它是一个开放架构,提供了公共接口,支持插件的继承;

二、仓库与配置

2.1、Maven仓库

1)它是基于简单文件系统存储,集中管理Java API资源(构建)的一个服务;
2)每个构建都有唯一坐标,坐标即其在仓库中的存储路径;
3)坐标由3部分组成:GroupId(公司名,多用公司网址倒写)、AtifactId(项目名)、Version(版本)
4)仓库分为中央仓库和本地仓库
中央仓库:是互联网上最大的仓库,但是访问速度较慢,所以通常配置成国内的镜像中央仓库(阿里镜像);
本地仓库:指用户电脑中存放下载jar包构件的的文件目录;

2.2、访问优先级

本地仓库 - 镜像仓库 - 中央仓库

2.3、settings.xml配置

1)配置本地仓库,默认路径为${user.home}/.m2/repository

<localRepository>C:\Users\Administrator\.m2\repository</localRepository>

2)配置镜像仓库(如阿里镜像)

<mirror>
	<!-- 指定镜像 ID --> 
	<id>nexus-aliyun</id> 
	<!-- 匹配中央仓库--> 
	<mirrorOf>central</mirrorOf> 
	<!-- 指定镜像名称 --> 
	<name>Nexus aliyun</name> 
	<!-- 指定镜像路径 --> 		
	<url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>

2)配置JDK

<profile>
	<id>jdk-1.8</id> 
	<activation> 
		<activeByDefault>true</activeByDefault> 
		<jdk>1.8</jdk> 
	</activation> 
	<properties>
		<maven.compiler.source>1.8</maven.compiler.source> 
		<maven.compiler.target>1.8</maven.compiler.target> 
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion > 
	</properties> 
</profile>

三、工程类型

1)POM工程:逻辑工程,用在聚合工程中,或者父级工程用来做 jar 包的版本控制;
2)JAR工程:Java项目,在打包时会将项目打成 jar 包;
3)WAR工程:Web项目,在打包时会将项目打成 war 包;

四、项目结构

1)src:包含了项目所有的源代码和资源文件以及测试代码;
2)src/main/java:储存 java 源代码;
3)src/main/resources:储存主要的资源/配置文件(.xml、.properties);
4)src/test/java:存放测试代码;
5)target:存放编译后内容;
6)pom.xml:核心配置文件,管理项目的基本信、继承关系、项目类型、依赖管理、依赖注入、插件管理、插件注入等;

五、POM模型

5.1、依赖关系

dependencies中,根据坐标实现包的依赖

5.1.1、依赖传递性

如果A依赖了B,那么C依赖A时会自动把A和B都导入进来

5.1.2、相同资源的依赖原则

1)第一原则:最短路径优先原则
比如A、B、C之间的依赖关系是A->B->C->D(2.0)和 A->E->(D1.0),那么D(1.0)会被使用,因为A通过E到D的路径更短;
2)第二原则:最先声明原则
比如A–>B–>Y(1.0),A–>C –>Y(2.0),Y(1.0)和 Y(2.0)的依赖路径长度是一样,那么在 POM中依赖声明的顺序靠前的优先;

5.1.3、依赖排除

通过exclusions排除不需要的jar包

<dependency> 
	<groupId>org.springframework</groupId> 
	<artifactId>spring-context</artifactId> 
	<version>5.2.4.RELEASE</version>
	<exclusions> 
		<exclusion> 
			<groupId>org.springframework</groupId> 
			<artifactId>spring-aop</artifactId> 
		</exclusion> 
	</exclusions>
</dependency>
5.1.4、依赖范围

通过scope指定依赖范围
1)compile:默认范围,表示该依赖在编译和运行时生效; 在项目打包时会将该依赖包含进去;
2)provided:可以参与编译,测试,运行等周期,但是不会被打包到最终的 artifact中;
如servlet-api,编译和测试项目的时候需要该依赖,但在项目打包的时候,由于容器已 提供,所有无需重复引入;
3)runtime:编译时不需要生效,运行时生效;
如JDBC驱动实 现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时 候才需要实现上述接口的具体JDBC驱动;
4)system:如果某些依赖的ja 包没有 Maven 坐标的,这时可以把它下载到本地硬盘,通过system来引用(会导致传递依赖中断,不建议使用)
5)test:只在编译测试代码和运行测试的时生效;(如JUnit)

5.1.5、依赖管理

通过dependencyManagement可以集中管理依赖信息,比如多个项目继承自同一个公有的父项目,那可以把所有依赖信息放在一个公共的POM文件中,并且在子POM中简单的引用该构件即可;

5.2、继承关系

5.2.1、概念

1)与Java 中的父子继承概念类似;
2)父项目中集中定义依赖和插件(须为POM类型
2)子项目中引用;

5.2.2、优点

1)依赖或插件的统一管理(在 parent 中定义,需要变更dependency版本时,只需要修改一处)
2)代码简洁(子项只需要指定 groupId,artifactId即可)
3)dependencyManagement可按需引入(子项目不会继承parent 中 dependencyManagement 所有预定义的 dependency)

5.2.3、多继承

在Maven中默认也是采用单继承,但是我们可以在子项目中通过添加dependencyManagement标记,type设置为pomscope设置为import,从而实现多继承;

<dependencyManagement> 
	<dependencies> 
		<!--父项目 a--> 
		<dependency> 
			<groupId>com.test</groupId> 
			<artifactId>parent_a</artifactId> 
			<version>1.0-SNAPSHOT</version> 
			<type>pom</type> 
			<scope>import</scope> 
		</dependency> 

		<!--父项目 b--> 
		<dependency> 
			<groupId>com.test</groupId> 
			<artifactId>parent_b</artifactId> 
			<version>1.0-SNAPSHOT</version> 
			<type>pom</type> 
			<scope>import</scope> 
		</dependency> 
	</dependencies> 
</dependencyManagement>

5.1、聚合关系

1)聚合可以将多个项目以模块方式聚合在一起,方便项目的管理;
2)聚合包含了继承的特性;
3)父项目为pom类型,在modules中标识子模块;
4)使用idea创建时,在父项目上右键创建module;

六、常见命令

1)clean:清除已编译信息,删除target目录;
2)validate:验证项目是否正确;
3)compile:只编译,javac命令;
4)test:执行项目测试;
如果在 test 目录下含有测试代码,那么 Maven 在执行 install 命令会先去执行 test 命令将所有的 test 目录下的测试代码执行一遍,如果有测试代码执行 失败,那么 install 命令将会终止;
5)package:打包,包含编译、打包2个操作;
6)verify:运行任何检查,验证包是否有效且达到质量标准;
7)install:本地安装,包含编译、打包、安装到本地仓库3个操作;
8)site:项目站点文档创建的处理,该命令需要配置插件;
9)deploy:远程部署命令;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值