上次我们讲过了Maven在运行过程中可能产生的联网问题,即它在构建过程中的各个阶段是需要具体的插件去执行的,这些插件并不存在Maven的核心程序中,它会先去本地仓库中寻找,若没有找到就会联网去中央仓库寻找,若为联网,则项目构建失败。下边我们来讲一讲Maven的坐标、仓库、依赖、范围。
1.坐标:简称jav(groupId artifactId version)
就是本项目的pom.xml中唯一一个标识本项目在Maven本地仓库的位置。形如:
<groupId>com.atguigu.maven</groupId> ---① 在本地仓库中的文件夹的路径
<artifactId>Hello</artifactId> ----② 在本地仓库中的文件夹的路径
<version>0.0.1-SNAPSHOT</version> ----③ 在本地仓库中的文件夹的路径
其中,②和③构成了项目被打成jar包之后的名称。
2.仓库
这个概念是当Maven核心程序运行时,会从仓库中寻找自身构建所需的插件、第三方框架或工具的jar包、我们自己开发的Maven工程。
仓库分为本地仓库和远程仓库
本地仓库:默认user/.m2/repository。可以在Maven核心程序下的conf.settings.xml中进行修改。
远程仓库又分为:
私服:局域网范围内的Maven服务,常用的私服是Nexus。
中央仓库:架设在Internet上,为全世界所有Maven工程服务。
中央仓库的镜像:为分担中央仓库的流量,提升用户访问速度。
3.依赖
若当前项目对Maven仓库中的jar包产生了依赖,则必须要在当前项目的pom.xml文件中声明这个jar包的坐标。
但是我们必须保证根据pom.xml中指定的坐标,我们可以找到这个jar,否则会报Error,且被依赖的jar包必须被install到本地仓库中过。
Maven解析当前项目的pom.xml文件的依赖信息时,会先到本地仓库中去寻找被依赖的jar包,找不到则会报错。
所以,对于我们自己的Maven过程,我们必须install一下,才可以将其对应的jar包放入到本地仓库中。
4.依赖的范围
在pom.xml文件中,我们可以指定所依赖的jar包,并且可以指定这个jar包在当前项目中的哪类代码中起作用,即哪类代码中被引用;还可以指定当前jar包在整个项目运行前被引用的时机。
主要是在dependency节点的scope节点内有三个值:compile/test/provided/system。
compile表示这个被依赖的jar包可以在整个程序中被引用,即它其中的类可以import。且一直到项目部署到服务器上,这个jar包也会被放到编译后的项目的lib目录下。它的jar参与打包。
test:表示这个被依赖的jar包只可以在test这个目录下被引用其中的类。且它的jar不参与打包。
provided:在工程中的所有代码都可以使用,但是它的jar包只可以在项目的编译时期才可以引用,在程序部署和运行的时候都不能被引用。它的jar不参与打包。
5.生命周期
Maven的核心程序定义了生命周期这个抽象的概念,具体的任务是需要参见完成的。
为了更好的实现自动化构建,Maven的生命周期的执行要求是:不论现在执行生命周期的哪个阶段,都要求从生命周期的最初阶段开始。
三个主要生命周期:清理、生成站点、部署项目。