文档章节

Maven仓库(四)

半夏alvin
 半夏alvin
发布于 2013/11/28 23:07
字数 1768
阅读 980
收藏 15

「深度学习福利」大神带你进阶工程师,立即查看>>>

在了解Maven如何使用仓库后,我们将能更高效的使用Maven。

前面我们已经讲过Maven的坐标机制,任何Maven项目使用任何构件的方式都是完全相同的。在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。实际的Maven项目将不再各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候,Maven会自动根据坐标找到仓库中的构件,并使用它们。

1. Maven仓库布局

Maven是如何根据坐标来定位路径的呢?下面举一个实际的例子:
有这样一个构件:groupId=org.testng、artifactId=testng、version=5.8、classifier=jdk15、packaging=jar,其对应的路径生成步骤如下:

1)基于groupId,将org.testng转换成org/testng/。
2)基于artifactId,路径变成org/testng/testng/。
3)使用版本信息,得到路径为org/testng/testng/5.8/。
4)依次加上artifactId,分隔符连字号,以及version,于是构件路径变成了org/testng/testng/5.8/testng-5.8。
5)如果有classifier信息,路径就变成org/testng/testng/5.8/testng-5.8-jdk5。
最后由packaging决定构件的扩展名,所以最后的路径为org/testng/testng/5.8/testng-5.8-jdk5.jar。

2. Maven仓库的分类

仓库分类:本地仓库和远程仓库。Maven根据坐标寻找构件的时候,它先会查看本地仓库,如果本地仓库存在构件,则直接使用;如果没有,则从远程仓库查找,找到后,下载到本地。

1)本地仓库
默认情况下,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。我们也可以自定义本地仓库的地址,如下:

这样,用户的本地仓库被设置成了D:/library/maven/repository/。我们需要从Maven安装目录复制$MAVEN_HOME/conf/settings.xml文件复制到D:/library/maven下进行编辑。大家不要直接修改全局目录下的settings.xml。

我们可以将依赖从远程仓库下载到本地仓库,也可以将本地仓库安装到Maven仓库中。如对前面我们讲过的hello-world项目执行mvn clean install(Eclipse中命令为clean install),结果如下:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building hello-world 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hello-world ---
[INFO] Deleting D:\code\maven\hello-world\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello-world ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\maven\hello-world\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ hello-world ---
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\code\maven\hello-world\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello-world ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\maven\hello-world\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ hello-world ---
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\code\maven\hello-world\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello-world ---
[INFO] Surefire report directory: D:\code\maven\hello-world\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.alvinliang.maven.HelloWorldTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.661 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello-world ---
[INFO] Building jar: D:\code\maven\hello-world\target\hello-world-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ hello-world ---
[INFO] Installing D:\code\maven\hello-world\target\hello-world-0.0.1-SNAPSHOT.jar to D:\library\maven\repository\com\alvinliang\maven\hello-world\0.0.1-SNAPSHOT\hello-world-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\code\maven\hello-world\pom.xml to D:\library\maven\repository\com\alvinliang\maven\hello-world\0.0.1-SNAPSHOT\hello-world-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.245s
[INFO] Finished at: Thu Nov 28 22:22:25 CST 2013
[INFO] Final Memory: 10M/55M
[INFO] ------------------------------------------------------------------------
从上述输出,我们可以看到构件的hello-world-0.0.1-SNAPSHOT.jar,安装到了本地仓库D:\library\maven\repository下。


2)远程仓库
本地仓库好比书房,而远程仓库就像是书店。对于Maven来说,每个用户只有一个本地仓库,但是可以配置多个远程仓库。

a.中央仓库
Maven必须要知道至少一个可用的远程仓库,中央仓库就是这样一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置。在settings文件有如下配置:

中央仓库包含了这个世界的绝大多数流行的开源Java构件,源码等。

b)私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它先从私服请求,如果私服上没有构件,测从外部的远程仓库下载,存在私服上,再为Maven用户下载。现在可以使用最流行的Maven私服软件--Nexus。后面专门介绍如何搭建私服。

3. 远程仓库的配置

见如下代码清单:

<repositories>
  	<repository>
  		<id>central</id>
  		<name>Central Repository</name>
  		<url>https://nexus/sourcesense.com/nexus/content/repositories/public/</url>
  		<layout>default</layout>
  		<snapshots>
  			<enabled>false</enabled>
  		</snapshots>
  	</repository>
<repositories>

注意上面的id设置为central,使用nexus官方的仓库地址来代替中央仓库,因为有时候中央仓库很慢。上述配置中设置snapshots为false表示关闭central仓库对快照版本的下载支持。

4. 远程仓库的认证

在局部文件settings.xml中,在servers元素下配置,如下:

<servers>
    <server>
      <id>central</id>
      <username>lb</username>
      <password>123456</password>
    </server>
<servers>

上述配置中id为关键元素,表示对那个远程仓库进行认证,这里配置的是中央仓库central。其中认证的用户名为lb,密码为123456。

5. 镜像

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。也就是说,任何一个可以从仓库Y获得的构件,都可以从它的镜像中获取。例如:http://maven.net.cn/content/groups/public/是重要仓库http://repo1.maven.org/maven2/在中国的镜像。由于地理位置的原因,镜像玩玩能够提供比中央仓库更快的服务。下面就是本人使用Nexus镜像来代替中央仓库的配置,编辑settings.xml,如下:

<mirrors>
  
    <mirror>
      <id>central</id>
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://localhost:8081/nexus/content/groups/public/</url>
    </mirror>
	
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
  </mirrors>

上述配置中,mirrorOf指的是为那个仓库提供镜像,如果设置为central,表示为中央仓库的镜像,设置为*表示为任意仓库设置的镜像配置。

6. 仓库搜索服务

最后我们在为Maven编写依赖的时候,是不是不知道从何处开始,如何寻找到需要的依赖呢?下面我提供几个非常不错的网址:
http://mvnrepository.com/ 

https://repository.sonatype.org/

打开其中一个页面,直接搜索关键字,可以得到依赖配置,如下图:

半夏alvin
粉丝 41
博文 48
码字总数 43348
作品 0
浦东
程序员
私信 提问
加载中
请先登录后再评论。
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
7
集群存储系统--YFS

YFS集群存储系统由多个元数据服务器(MDS)、多个块数据服务器(CDS)和多个客户端(client)互联组成集群; 数据被分成64M固定大小的数据块(Chunk),每个数据块在CDS本地以常规文件的形式...

匿名
2013/02/19
1.8K
0
ThinkPHP助手

ThinkPHP助手 简介 ThinkPHP助手是运行在本地的ThinkPHP开发辅助性工具,也是本人的初学LAMP的学习成果,基于ThinkPHP+XML,前端采用jQuery和Bootstrap。主要目的是将应用开发过程中的一些繁琐...

朱__朱
2012/11/16
9.2K
2
Java 反射封装库--Mirror

给一个简单的问题带来光明的解决方案,通常用ReflectionUtil命名。 在几乎所有项目都需要依靠反射来做高级任务。但是,处理Java反射API是痛苦的。问任何使用过反射的人,他会告诉你它是真的令人...

jiangyuan
2012/12/07
2.4K
0
新概念PHP包管理器--PHP Composer

几乎每种语言都有包管理器。Java有Maven,Python有easy_install和pip,Ruby有gem,Nodejs有npm。说到PHP当然也有PEAR,但我一直认为PEAR是设计最烂的一个包管理器:依赖处理不到位、配置复杂...

匿名
2013/05/15
5.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

利用Numpy中的ascontiguousarray可以是数组在内存上连续,加速计算

1. 概述 在使用Numpy的时候,有时候会遇到下面的错误: AttributeError: incompatible shape for a non-contiguous array 看报错的字面意思,好像是不连续数组的shape不兼容。 有的时候,在看...

osc_9we1w99u
14分钟前
0
0
如何管理客户的期望值?

根据客户关系管理(CRM)中的三角定律,客户满意度=客户体验-客户期望值。客户期望值与客户满意度成相对反比,因此需要引导客户期望值并维持在一个适当的水平,同时客户期望值需要与客户体验协...

cailisuper
今天
0
0
阿里研究员:软件测试中的18个难题

阿里QA导读:对于软件测试来说,怎么样才算测够了?如何评价测试的有效性?那么多测试用例,以后怎么删?在软件测试中会遇到非常多的问题,阿里研究员郑子颖分享了18个他总结出的难题以及相关...

阿里巴巴技术质量
昨天
0
0
Numpy的常用函数总结

1、np.argmax()、np.max()、np.argmin()、np.min()用法: argmax返回的是最大数的索引.argmax有一个参数axis,默认是0。看二维的情况如下: a = np.array([[1, 5, 5, 2],            ...

osc_auwur47t
16分钟前
0
0
【报告分享】2020抖音进阶-挑战赛2.0产品营销方案.pdf(附下载链接)

大家好,我是文文(微信:sscbg2020),今天给大家分享抖音营销中心出品的《2020抖音进阶-挑战赛2.0产品营销方案.pdf》,方案里面的玩法解析、案例、营销重点分析等都很清晰,对短视频及品牌...

智能推荐系统
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部