maven,你不得不知道的something!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baomw/article/details/83999605

写在前面:关于maven,相信对于绝大多数从事java开发的大兄弟们是既熟悉又陌生的。说熟悉呢是因为我们每天都在使用maven,说陌生呢,可能对于绝大多数人而言,对maven的认知仅仅只停留在使用上,并不清楚maven的工作原理,以及体系结构。下面我会用这篇文章,详细介绍一下maven的使用及其体系结构。
这篇呢主要介绍下maven安装,环境的搭建,然后使用idea构建一个maven的简单的spring项目并运行,然后介绍下maven的一些基本概念:依赖管理,坐标,仓库,生命周期,然后maven的插件等等

1,安装maven(我们直接去官网下载即可) :
下载地址:http://maven.apache.org/download.cgi
在这里插入图片描述
如图,我们选择自己需要的版本下载即可。maven不需要安装,下载zip到本地解压后即可使用,当然如果需要在cmd环境下使用maven命令,需要配置下maven的环境变量
在这里插入图片描述
如图新增变量MAVEN_HOME或M2_HOME(注意只能叫这两个名字),配置成本地解压的maven安装包路径,然后将%M2_HOME%\bin;追加到path即可,配置完成后win+r cmd进入dos命令窗口,输入mvn -version,能正确输出版本信息即可
在这里插入图片描述
环境变量配置完以后我们找到安装目录下的setting.xml(D:\software\apache-maven-3.0.5\conf目录下),配置下我们本地的仓库(仓库后面会详细介绍)
在这里插入图片描述

如图,我将本地的maven仓库配置成了D:\repo,当然不配置也可以,maven会默认创建一个本地工作仓库目录C:\Users\Administrator.m2\repository,不过作为一个强迫症晚期的钢铁直男,我还是户配置成自己需要的目录,这样更多的是为方便管理我们的仓库。
如此,本地maven环境的搭建配置就算大功告成了。

2,使用idea构建我们的maven项目(为什么是idea,不是eclipse或其他的呢:首先,idea强大的插件功能,对于maven或其他类型项目的构建如gradle等的构建会非常方便,几乎可以满足java开发的所有需求。其次,idea逼格高啊!)
file-new-project,然后选maven next
在这里插入图片描述
如下,填上对应的项目名称和模块名称即可(后面会介绍什么是groupid,什么是artfactid),然后next,一直到finish
在这里插入图片描述
如图,我们便完成了一个mavan项目框架的搭建。
在这里插入图片描述
idea默认有自己的maven插件,同时,我们也可以选择使用自己本地的maven,具体设置为:file-settings-maven,如图idea提供了两个maven版本,我们系统的环境变量配置了一个,这里我们选我们自己配的maven,好方便使用我们自己的仓库来管理jar包。
在这里插入图片描述

下面我们来够建一个简单的spring项目。第一步,如图在pom.xml中增加spring-context的依赖
在这里插入图片描述
如此,项目正确输出
在这里插入图片描述
至此一个maven项目就构建完成了,是不是很简单呢,而且我们只需要在pom.xml整增加下jar的配置信息,并不需要去关心jar的导入等等,对于开发来说,确实很方便呢。下面我们就来详细说下maven。

3,Maven简介(关于maven简介,我总结精简了如下几点,至于详细信息,可参考百度上各大详解内容)
1)什么是Maven
Maven是跨平台的项目管理工具。主要服务鱼基于Java平台的项目构建,依赖管理和项目信息管理。
2)什么是理想的项目构建
包括如下步骤:清理—>编译—>测试—>报告—>打包—>部署
高度自动化,跨平台,可重用的组件,标准化的
3)什么是依赖?为什么要进行依赖管理?
自动下载,统一依赖管理
4)有哪些项目信息
项目名称描述等,开发人员信息,开发者信息
5)项目构建过程
4,为什么使用Maven,对于为什么使用maven,我还是用一个对比来说下吧,其中妙处读者可自行体会
不使用Maven:
1)手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
2)每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错
使用Maven:
1)拥有约定,知道你的代码在哪里,放到哪里去
2)拥有一个生命周期,例如执行 mvn install就可以自动执行编译,测试,打包等构建过程
3)只需要定义一个pom.xml,然后把源代码放到默认目录,Maven帮你处理其他事情
4)拥有依赖管理,仓库管理
5,Maven相关概念介绍
1)项目对象模型(POM):可通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具(pom.xml)
2)坐标
Maven坐标主要组成
groupId:定义当前Maven项目隶属项目
artifactId:定义实际项目中的一个模块
version:定义当前项目的当前版本
packaging:定义该项目的打包方式
Maven为什么使用坐标
Maven世界拥有大量构建,我们需要找一个用来标识
3)依赖管理
a)依赖声明
在这里插入图片描述
b)依赖范围
依赖范围scope用来控制依赖和编译、测试、运行的classpath的关系
compile:默认编译依赖范围。对于编译、测试、运行三种classpath都有效。
test:测试依赖范围。只对于测试classpath有效。
provided:已提供依赖访问。对于编译、测试的classpath有效,但对于运行无效,因为容器已经提供,例如 servlet-api
runtime:运行时提供。例如jdbc驱动。 在这里插入图片描述
4)仓库管理
何为Maven仓库:用来统一存储所有Maven共享构建的位置就是仓库
Maven仓库布局:根据Maven坐标定义每个构建在仓库中唯一存储路径
大致为:groupId/artifactId/version/artifactId-version.packaging
仓库的分类
本地仓库:前面setting.xml中配置的本地仓库地址,每个用户只有一个本地仓库
远程仓库
中央仓库:Maven默认的远程仓库:https://mvnrepository.com/tags/maven
私服:是一种特殊的远程仓库,它是架设在局域网内的仓库(后面会详细介绍私服的搭建,架构师必备技能之一)
镜像:用来替代中央仓库,速度一般比中央仓库
在这里插入图片描述
5)生命周期:Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤
Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。
a)、clean生命周期:清理项目,包含三个phase。
pre-clean:执行清理前需要完成的工作
clean:清理上一次构建生成的文件
post-clean:执行清理后需要完成的工作
b)、default生命周期:构建项目,重要的phase如下。
validate:验证工程是否正确,所有需要的资源是否可用。
compile:编译项目的源代码。
test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
Package:把已编译的代码打包成可发布的格式,比如jar。
integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
verify:运行所有检查,验证包是否有效且达到质量标准。
install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
c)、site生命周期:建立和发布项目站点,phase如下
pre-site:生成项目站点之前需要完成的工作
site:生成项目站点文档
post-site:生成项目站点之后需要完成的工作
site-deploy:将项目站点发布到服务器
6,maven插件
Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的,每个插件都能实现多个功
能,每个功能就是一个插件目标。Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任
务。例如:compile就是插件maven-compiler-plugin的一个插件目标。
1)jdk编译插件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.luban.maven</groupId>
<artifactId>Hello</artifactId>

<version>0.0.1-SNAPSHOT</version>
   <build>
		    <plugins>
				   <plugin>
				    		<groupId>org.apache.maven.plugins</groupId>
				   		    <artifactId>maven-compiler-plugin</artifactId>
				    		<version>3.8.0</version>
				    		<configuration>
							   <source>1.8</source>
							    <target>1.8</target>
							    <encoding>UTF-8</encoding>
						    </configuration>
				    </plugin>	
		    </plugins>
    </build>
</project>

2)源码打包插件
a)解决idea中,创建web项目慢的方式:
在Properties中添加Name:archetypeCatalog和Value:internal,如下图那样
也可以在设置中指定Maven-Runne的VM: -DarchetypeCatalog为internal
b)打包插件pom.xml

 <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-source-plugin</artifactId>
    	<version>2.2.1</version>
    	<executions>
    		<execution>
    			<goals>
    				<goal>jar-no-fork</goal>
    			</goals>
    			<phase>verify</phase>
    		</execution>
    	</executions>
    </plugin>

3)Tomcat插件

	<plugin>
		<groupId>org.apache.tomcat.maven</groupId>
		<artifactId>tomcat7-maven-plugin</artifactId>
		<version>2.1</version>
		<configuration>
			<port>8081</port>
			<server>tomcat7</server>
		</configuration>
	</plugin>

好了,以上就是关于maven的全部内容了,同时欢迎大家纠正和补充,谢谢!

猜你喜欢

转载自blog.csdn.net/baomw/article/details/83999605