maven常用知识详解2:仓库

本文详细介绍maven常用知识:仓库。接上一篇,maven常用知识详解1:坐标和依赖

Maven仓库

 仓库分类

仓库分为两类:本地仓库、远程仓库(私服也是一种特殊的远程仓库)。

Maven根据坐标寻找构建时,首先查看本地仓库,本地有则直接使用;如果没有会去远程仓库查找,找到后下载本地使用。如果本地和远程都没有,则会报错。

1.本地仓库

编辑文件~/.m2/settings.xml(默认情况该文件不存在,需从安装目录$M2_HOME/conf/settings.xml复制编辑,推荐使用修改此用户配置,不建议修改全局目录),设置localRepository元素

java 复制代码
<localRepository>
	D: \repository\maven
</localRepository>

构件只有在本地仓储存在才可以供Maven项目使用,常见构件存入本地仓库的方法:

a.依赖Maven从远程仓库下载

b.将本地项目安装到Maven仓库

c.将本地项目构建安装进Maven仓库。在项目中执行mvn clean install,当出现BUILD SUCCESSFUL即构建成功。

2.远程仓库

a.中央仓库(Maven核心自带的特殊远程仓库,默认配置下本地仓库没有则尝试从中央仓库下载)

b.私服(特殊的远程仓库)

架设在局域网内部的仓库服务器,代理广域网上的远程仓库,供局域网内的Maven用户使用。

使用私服的好处:

  1. 节省自己的外网宽带和时间
  2. 加速Maven构建
  3. 部署第三方构建
  4. 提高稳定性,增强控制
  5. 降低中央仓库的负荷
    常见私服Sonatype Nexus搭建,参考:
    https://www.cnblogs.com/bingyeh/p/5913486.html
    c.其它公共库
    常见的远程仓库:
    Java.net Maven库:http://download.java.net/maven/2/
    Jboss Maven库:http://repository.jboss.com/maven2/

 远程仓库的pom配置

当默认的中央仓库无法满足项目需求时,可在pom文件中配置另外的远程仓库:

java 复制代码
<project>
......
     <repositories>
       <repository>
         <id>cloudhopper</id>
         <name>Repository for Cloudhopper</name>
   		 <url>
			http://maven.cloudhopper.com/repos/third-party/
		 </url>
         <releases>     
           <enabled>true</enabled>     
         </releases>     
         <snapshots>     
           <enabled>false</enabled>     
         </snapshots>
  		 <layout>default<layout>
       </repository>
    </repositories>
</ project >

在repositories元素下可以使用repository子元素声明一个或多个远程仓库。 releases用来控制maven对于发布版构件的下载,enabled 属性值为true表示开启本仓库发布版本下载;snapshots用来控制maven对于快照版构件下载,enabled属性值为false表示关闭快照版本下载.

layout元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1布局。

*对于元素releases和snapshots来说,除了enabled外还包括另外两个子元素updatePolicy和checksumPolicy:

updatePolicy:用来配置Maven从远程仓库检查更新的频率,默认是daily,表示Maven每天检查一次。其他值,never-从不检查更新;always-每天构建都检查更新;interval:x-每隔x分钟检查更新一次(x为任意整数)。

checksumPolicy:用来检查检验和文件的策略。当构件被部署到Maven仓库时,会同时部署对应的校验和文件。下载构件时,Maven会验证校验和文件。如果校验和验证失败,当checksumPolicy的值为默认warn时,Maven会在构建时输出警告信息;为fail时,就让构建失败;为ignore时,使Maven完全忽略校验和错误。

 远程仓库的认证

对于需要提供认证信息才可以访问的远程仓库,应当在settings.xml文件中添加认证信息:

java 复制代码
<settings>
......
	<servers>
		<server>
		  <id>my-proj</id>
		  <username>username</username>
		  <password>pwd</password>
		</server>
	</servers>
</settings>

这里的关键元素是id,setting.xml中server元素的id必须与POM中需要认证的repository元素的id完全一致。

 部署构件至远程仓库

java 复制代码
<project>
......
   <distributionManagement>
       <repository>
          <id>proj-releases</id>
          <name>proj release repository </name>
    		<url>
				http://192.168.0.1/content/ proj-releases 
			</url>
		</repository>
       <snapshotRepository >     
          <id>proj-snapshots</id>
          <name>proj snapshots repository</name>
    	  <url>
			http://192.168.0.1/content/ proj- snapshots
		  </url>
       </snapshotRepository >
   </distributionManagement >
</project >

:distributionManagement元素下的两个子元素,repository表示发布版本构件的仓库,snapshotRepository表示快照版本的仓库。

配置正确后,在命令行运行mvn clean deplay,将项目构建输出的构件部署到配置对应的远程仓库。

项目中快照版本的使用,只应该在组织内部的项目或模块间依赖使用,而不应该依赖于任何组织外部的快照版本,因为快照版本的不稳定性,容易造成潜在的危险。因此,当项目经过完善的测试需要发布时,就应该将快照版本更改为发布版本。

 镜像

如果仓库X可以提供仓库Y存储的所有内容,则可以认为X是Y的镜像

例:http://uk.maven.org/maven2是中央仓库http://repol.maven.org/maven2在中国的镜像,该镜像可以提供比中央仓库更快的服务。

配置方式(在settings.xml中添加配置):

java 复制代码
<settings>
	......
	<mirrors>
		<mirror>
     		<id>UK</id>
     		<name>UK Central</name>
     		<url>http://uk.maven.org/maven2</url>
     		<mirrorOf>central</mirrorOf>	
       </mirror> 
	</mirrors>
</settings>

mirrorOf的属性值:

central表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像。

* 匹配所有远程仓库

external:* 匹配所有不在本机上的远程仓库

repo1,repo2 匹配多个远程仓库,用','分割

*,!repo1 匹配所有除repo1外的远程仓库
:mirrorOf的属性值是central,表示该仓库是中央仓库的镜像。如果该镜像仓库需要认证,只需要配置一个和id属性值对应的即可。因为镜像仓库完全屏蔽被镜像仓库,当镜像仓库不稳定时,maven将无法下载构件。

☆点击:精彩内容,了解更多

相关推荐
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭11 分钟前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫27 分钟前
泛型(2)
java
超爱吃士力架32 分钟前
邀请逻辑
java·linux·后端
南宫生36 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石44 分钟前
12/21java基础
java
李小白661 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp1 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶2 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
n北斗2 小时前
常用类晨考day15
java
骇客野人2 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言