Maven中的构件、坐标、仓库、镜像等概念介绍

编程

        坐标

        Maven坐标为各种构件引入秩序,任何一个构件都必须有一个明确的坐标,下面的代码片段展示了一个依赖构件的坐标:

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>4.3.16.RELEASE</version>

</dependency>

         这是spring-core的坐标,Java中最流行的开发框架Spring中core模块,下面详细介绍各坐标元素:

        groupId:定义Maven项目隶属的实际项目,这里的Maven项目和实际项目不是一对一的关系。比如在SpringFramwork这个实际项目中,对应的Maven项目会有很多。例如spring-core、spring-context等。这是由于Maven中的模块的概念,因此,一个实际项目会被划分成多个模块。groupId与Java中的包名很类似,通常与域名反向一一对应。

        artifactId:该元素定义实际项目中一个Maven项目(模块),推荐使用实际项目名称作为前缀。例如上述中的spring是实际项目名称,core是模块名称。这样方便寻找实际的构件。

        version:定义Maven项目的版本号,如上述版本号4.3.16.RELEASE。在Maven中定义了一套完整的版本规范,以及快照(SNAPSHOT)的概念。

        Maven项目的文件名与坐标一般是对应上的,一般的规则是artifactId-version.jar,如上述的构件的名称就是spring-core-4.3.16.RELEASE.jar。Maven仓库中的布局也是基于坐标的。

        仓库

        在一台工作站上,可能存在很多Maven项目,这些项目大部分依赖log4j,小部分依赖spring。在每个项目中都存在一个lib目录,该目录下都有相同依赖的重复文件。这显然不是有效的管理方式,既浪费存储空间,也难以统一管理,文件复制速度降低。

        得益于Maven坐标,任何Maven项目使用任何一个构件的方式都是相同的。基于此、Maven可以在某一个地方统一存储所有Maven项目共享的构件,这个统一的地方就是仓库。Maven项目将不再各自存储依赖的文件,只需要声明依赖构件的坐标,在必要的时候(构建时),Maven会自动根据坐标从仓库中找到构件,并使用他们。为了实现重用,构建生成的构件也可以安装到仓库中,供其他项目使用。

        任何一个构件都有一个唯一坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这便是仓库的布局方式。例如依赖org.springframework:spring-core:4.3.16.RELEASE这个依赖,其在仓库中的存储路径是org/springframework/spring-core/4.3.16.RELEASE/spring-core-4.3.16.RELEASE.jar。

        在Maven中,仓库只有两类:本地仓库和远程仓库。当Maven根据坐标查找构件时,会先查找本地仓库,如果本地仓库中有,则直接使用;如果本地仓库没有,则Maven会查询远程仓库,下载到本地仓库;如果远程仓库也没有则报错。在远程仓库中,存在一个中央仓库,Maven自带的,包括绝大部分构件。私服(Nexus)也是一种远程仓库,用于节省下载时间,架设在局域网中,也可以发布构件到私服中。除了这些中央仓库和私服,也存在一些公共仓库,例如阿里Maven库、spring Maven库等。

        本地仓库

        本地仓库默认的路径是“~/.m2/respository”,其中~代表家目录。可以通过修改settings.xml文件指定本地仓库的存储路径,具体请参考Maven的安装和配置。

        私服

        私服(例如Nexus)是一种特殊的远程仓库,他是架设在局域网中的仓库服务,私服代理互联网上的远程仓库,共局域网中的Maven用户使用。当Maven需要下载构件,他从私服请求,如果私服不存在,则从互联网中的远程仓库下载,缓存到私服中,再为Maven的下载请求提供服务。另外,一些无法从互联网下载的构件也可以从本地上传到私服中供大家使用。

        镜像

        如果仓库X可以提供仓库Y存储的所有内容,则我们说仓库X是仓库Y的镜像。换句话说,能够从仓库Y中获取的,都可以从他的镜像获取。在局域网中一般通过私服作为中央仓库的镜像,提供更好的体验。可以配置Maven使用镜像来提供中央仓库,编辑settings.xml文件:

<mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://localhost:8019/repository/maven-public/</url>
</mirror>

        上面配置一个ID为nexus的镜像,通过标签 mirrorOf配置为“*”,表示匹配所有的远程仓库,任何对应远程仓库的请求都将转到标签url配置的地址。这是结合私服实现的,所有的远程仓库请求都被转到了私服,如果私服停止服务,则将无法下载任何构件。

以上是 Maven中的构件、坐标、仓库、镜像等概念介绍 的全部内容, 来源链接: utcz.com/z/516079.html

回到顶部