首先是Maven的官网guide,包含了相当多的内容。有时间的时候应该全部浏览一遍。
http://maven.apache.org/guides/index.html
参考原文:
http://maven.apache.org/guides/introduction/introduction-to-repositories.html
在Maven出现之前,如果我们希望在自己的程序中使用第三方类库,需要怎么做呢?
首先,得到这个类库的jar包。可以从官网上下载,也可以从别的地方copy过来。
然后把这个包import到IDE中的JRE System Library中,就可以开始使用了。
不算复杂,但使用Maven更简单。你只需要告诉Maven,我需要用某个类库,就OK了。
Maven将自动去获取你需要的这个类库,从哪?repository。
A repository in Maven is used to hold build artifacts and dependencies of varying types.
repository只有两种:local and remote。所以当你告诉Maven要使用某类库时(即当一个项目声明要使用一个dependency),Maven做的事情就是:从它在网络上的远程repository 找到这个类库,下载到你本地的repository(默认在c盘 ...\.m2\repository)中。
如果Maven发现你本地的repository已经有这个类库,那就什么都不做。
因此,remote repository包含了相当丰富的流行的类库/框架/工具。如果你需要使用某个很偏门儿的类库,那么,通常还是只能用老方法,自己去下载先。
下载后可以在命令行中运行mvn install,将类库安装到自己本地的repository中去。
远程repository有两种,一种是由公共组织提供的:
a third party to provide their artifacts for downloading (for example, repo1.maven.org and uk.maven.org house Maven's central repository).
我们通常都会使用这些repository。这些repository有两个问题:
1,网络问题。例如你所在的环境没有网络。或者公司对互联网访问有限制,导致你无法访问到。
2,由于Maven已经相当流行,有时这些repository服务器会因为负载过高而出现问题。
默认情况下,会去默认的repository 下载artifact。
http://repo1.maven.org/maven2/ (从前提供了browse的功能,但是现在被禁止了)
如果不想使用这个默认的repository,可以在settings.xml中使用mirrors来指定别的。但是在POM中可以指定使用的repository所以这个设置可能被覆盖。
(关于settings.xml,可以参考 http://maven.apache.org/settings.html#Servers。个人认为要必要把这个也好好看看。)
另一种可以是公司自己搭建的,用于公司内部人员共享的repository。这样通常就不会有网络和负载的问题了。
文章最后讲述了如何搭建internal repository。有兴趣的同学自行参考。
需要说明的一点是:
Such an internal repository can be downloaded from using HTTP or the file system (using afile:// URL), and uploaded to using SCP, FTP, or a file copy.
Note that as far as Maven is concerned, there is nothing special about this repository: it is anotherremote repository that contains artifacts to download to a user's local cache, and is a publish destination for artifact releases.
因此repository没有什么特别,它可以是任何一个文件系统,上传和下载可以使用多种协议。但需要使用repository manager来搭建一个repository server。
http://maven.apache.org/repository-management.html
讲述了3种repository manager工具,及其作用。
最后再提一下关于settings.xml。有两种settings.xml:
- The Maven install: $M2_HOME/conf/settings.xml
- A user's install: ${user.home}/.m2/settings.xml
第一个settings.xml,也称为global settings。第二种,也称为user settings。这里有一点及其重要的!不论是global settings还是user settings,settings.xml都不会被自动创建。
例如,你现在想把local repository放到一个你自己指定的地方,而不是默认的地方,就可以创建一个user settings,同时在其中指定你需要的位置。
创建方法很简单,到官网上copy一个例子,并修改相应的内容就可以了。user settings中的配置优先级更高。