Maven—跨平台的管理工具

为什么需要Maven

我们知道在学jdbc的时候我们对我们的java项目进行了导包。这些包其实并不好找,或者来自官网,或者来自网友的分享,或者来自项目团队的共享,不论何种方式,都需要把jar文件复制到lib目录中,并且buildpath。而且一旦是导入也很容易不兼容。Maven改变这种手动维护jar的方式,设计出一套自动维护jar的体系,已经广泛在软件项目中使用,是软件开发人员必须掌握的技术。

四大特征

Maven有一个创先河的发明,他发明了仓库,坐标,依赖,命令的pom模型。来帮助我们自动导包。

仓库 repository

当用户需要某个jar包时,先到本地仓库寻找,没有再去镜像仓库,没有再去中央仓库。中央仓库找到后,并不直接返回到本地仓库,而是保存一份到镜像仓库,镜像仓库返回本地仓库,本地仓库也保存一份,然后返回给调用者。

依赖 dependency

每个核心jar包形成一个依赖,maven底层进行它相关的jar的自动导入看例子:

<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.21</version>
</dependency>
坐标 coordinate

坐标其实就是每一个jar包的地址,我们通过坐标来找到我们想要的包。类似于哪个省哪个市哪个县…
在这里插入图片描述

命令 mvn cmd

Maven借鉴前辈定义了一套生命周期。共有3个生命周期:clean、default、site,每个生命周期包含多个阶段phase。

命令名称命令作用
*clean清理
compile编译
*test测试
site站点文档
*package打包jar、war
deploy部署到私服
*install安装jar到本地仓库中
run运行

这些看起来都很正常,接下来我要说的就很厉害了,Maven命令有一个强大的功能叫做一键部署。
每个周期中运行一个命令时,在这个周期里的其他在该命令之前的phase步骤都会执行。如:执行install会自动执行compile(编译java变成了class),test(运行所有单元测试类),package(把整个项目零碎的class文件打包为jar包),最终把成品jar发布到本地仓库中。但执行install并不会自动执行clean。也就是说他可以全自动的进行一部分命令,简化了我们程序员的很多事情。

安装

下载Maven

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

设置镜像仓库

找文件:settings.xml
路径:apache-maven-3.6.3\conf\settings.xml
默认从maven官网下载,因为是国外网站,因此速度缓慢。所以配置为阿里镜像,速度快,但有时有错,如果有错,删除配置,默认从maven官网下载。
设置方式:
把这段代码复制到settings.xml文件中具体的位置大概在150多行。

<mirror>
	<id>alimaven</id>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	<mirrorOf>central</mirrorOf>  
</mirror>
改变本地仓库位置

这个路径可以自行选择,不建议C盘。

<localRepository>D:\java\eclipseworkspace\env\mvnr</localRepository>
profiles简单maven信息

放入profiles标签内部

<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>
告诫

在setting.xml文件配置完以后,最好格式化xml,同时通过cmd mvn system:help这个命令判断是否成功。

eclipse集成Maven

进入eclipse的preferences菜单,选中Maven项,将“Download Artifact Sources”打钩,
在这里插入图片描述
随后:Eclipse默认已经集成了maven(EMBEDDED),但我们基本不采用,据说有问题,我们习惯自己下载最新版本的maven,自行配置。选择安装的maven所在根目录,别忘记打钩哦。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
此时已经可以创建Maven对象到此时可以说是成功了。

创建Maven工程

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

导入依赖

在pom.xml中加入下列代码即为导入mysql依赖

<dependencies>
  	<dependency>
  		<groupId>mysql</groupId>
  		<artifactId>mysql-connector-java</artifactId>
  		<version>8.0.21</version>
  	</dependency>
  </dependencies>

idea导入maven

在这里插入图片描述

依赖冲突

我们在上边说过依赖有四种,compile,text,provided,runtime
我们可能会遇到一个情况就是A对于B是依赖的,B对于C是依赖的,那么A是不是相当于间接的依赖C,也就是说依赖具有传递性
我们再做一个假设:A依赖B,B依赖C,C依赖D;另一个是A依赖B,B依赖D
此时我们就遇见了依赖冲突,Maven处理的方式是最短路径优先
但是我们如果两个路径一样长呢?
我们的第二原则是路径一样,先声明的优先

依赖排除

并不是所有时候我们都想要短路径优先,我们可以通过依赖排除,排除短路径,把下列代码放入依赖即可:

<exclusions>
				<exclusion>
					<groupId>javassist</groupId>
					<artifactId>javassist</artifactId>
				</exclusion>
			</exclusions>

版本号共享

通常在项目中,我们会同时依赖同一个构件的不同模块,如 spring-orm-3.2.0,spring-context-3.2.0,且多个模块版本相同,为了维护和升级方便,我们可以对其同一管理,这时可以使用到 Maven 属性,类似于变量的概念。
定义方式:

<properties>
		<junit.version>1</junit.version>
		<spring.version>2.RELEASE</spring.version>
	</properties>

调用方式:

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
</dependency>

常见问题

1.查询最新版本和坐标网址: Maven Repository:Search
2.内存溢出:使用 mvn site会耗费大量内存,则修改默认配置

D:\javaenv\apache-maven-3.0.5\bin\mvn.bat
在@REM set MAVEN_OPTS=……后加入
set MAVEN_OPTS= -Xms128m -Xmx512m

3.版权导致jar远程仓库中没有
例如oracle、全文检索的IKAnalyzer分词器、Dubbox等。
解决办法:按maven坐标手动创建目录结构,将jar单独下载,放入其中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值