maven实战(1)-- maven仓库

来源:互联网 发布:常见的网络攻击类型 编辑:程序博客网 时间:2024/04/29 02:39

maven仓库配置

转自:http://blog.csdn.net/dongnan591172113/article/details/7685164

1.两类仓库

1.1本地仓库(local repository)

可以自定义本地仓库的位置,修改${user.home}/.m2/settings.xml :

Xml代码 
  1. <settings>  
  2.   ...  
  3.   <localRepository>D:\java\repository</localRepository>  
  4.   ...  
  5. </settings>  

你还可以在运行时指定本地仓库位置:

mvn clean install -Dmaven.repo.local=/home/juven/myrepo/



1.2远程仓库(Remote repositories)

可以使用访问协议 such as file:// and http://运行maven所需jar包都是从本地仓库,引用在本地仓库没有时将触发从远处次仓库下载,并保存到本地。


2.Maven仓库概览

 

2.1 没有Maven仓库下的开发环境


 

2.2 具有团队内部远程仓库的开发环境

 

下面将就图2.2构建一个团队共享的maven repository

3.Maven仓库工具---Artifactory

3.1下载最新Artifactory,下面就我下载的Artifactory2.6.1配置作简单介绍。

1.双击artifactory.bat即可启动artifactory服务。访问地址http://localhost:8081/artifactory/可以看到服务的管理界面。

 2.也可以在Tomcat部署Artifactory. 

    Startup the Servlet Container VM with -Dartifactory.home=$ARTIFACTORY_HOME, pointing to the location of your Artifactory home folder (If you do not specify this property it will default to${user.home}/.artifactory).

Alternatively, you can also set an ARTIFACTORY_HOME environment variable to point to your Artifactory home folder.
      Make Sure the folder is writable  by the user running the Servlet Container.
Artifactory will try to create the folder on startup if it does not exist.

Make sure the Artifactory configuration file $ARTIFACTORY_HOME/etc/artifactory.config.xml and the log4j configuration file $ARTIFACTORY_HOME/etc/log4j.properties exist in their respective locations.

Deploy the artifactory.war file into the container.



3.2.maven的远程仓库地址设置

默认的远程仓库

我安装了maven-2.0.10,我可以找到这个文件:${M2_HOME}/lib/maven-2.0.10-uber.jar ,打开该文件,能找到超级POM:\org\apache\maven\project\pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven项目继承该配置,你可以在这个POM中发现如下配置:

Xml代码  收藏代码
  1. <repositories>  
  2.   <repository>  
  3.     <id>central</id>  
  4.     <name>Maven Repository Switchboard</name>  
  5.     <layout>default</layout>  
  6.     <url>http://repo1.maven.org/maven2</url>  
  7.     <snapshots>  
  8.       <enabled>false</enabled>  
  9.     </snapshots>  
  10.   </repository>  
  11. </repositories>  

上为超级POM配置了ID为central的远程仓库,如果pom.xml中未配置仓库,默认的将使用这个central的超级仓库。

3.2.1在POM中配置远程仓库

使用artifactory在POM中配置其它的远程仓库。


[html] view plaincopy
  1. <project>  
  2.   .....  
  3. <repositories>  
  4.     <repository>  
  5.       <id>my-repo</id>  
  6.       <name>my repository</name>  
  7.       <url>http://localhost:8080/artifactory/my-repo/</url>  
  8.       <releases>  
  9.         <enabled>true</enabled>  
  10.       </releases>  
  11.       <snapshots>  
  12.         <enabled>true</enabled>  
  13.       </snapshots>  
  14.     </repository>  
  15.   </repositories>  
  16.   
  17.   <pluginRepositories>  
  18.     <pluginRepository>  
  19.       <id>my-repo</id>  
  20.       <name>my repository</name>  
  21.       <url>http://localhost:8080/artifactory/my-repo/</url>  
  22.       <releases>  
  23.         <enabled>true</enabled>  
  24.       </releases>  
  25.       <snapshots>  
  26.         <enabled>true</enabled>  
  27.       </snapshots>  
  28.     </pluginRepository>  
  29.     <pluginRepository>  
  30.       <name>oss.sonatype.org</name>  
  31.       <id>oss.sonatype.org</id>  
  32.       <url>http://oss.sonatype.org/content/groups/public</url>  
  33.     </pluginRepository>  
  34.   </pluginRepositories>  
  35.   ...  
  36. </project>  



3.2.2在settings.xml中配置远程仓库

除了在pox.xml配置仓库,setting文件可以作为一个全局的配置,但并不是简单的将POM中的<repositories>及<pluginRepositories>元素复制到settings.xml中就可以,setting.xml不直接支持 这两个元素。但我们还是有一个并不复杂的解决方案,就是利用profile,如下:

Xml代码  收藏代码
  1. <settings>  
  2.   ...  
  3.   <profiles>  
  4.     <profile>  
  5.       <id>dev</id>  
  6.       <!-- repositories and pluginRepositories here-->  
  7.     </profile>  
  8.   </profiles>  
  9.   <activeProfiles>  
  10.     <activeProfile>dev</activeProfile>  
  11.   </activeProfiles>  
  12.   ...  
  13. </settings>  

这里我们定义一个id为dev的profile,将所有repositories以及pluginRepositories元素放到这个profile中,然后,使用<activeProfiles>元素自动激活该profile。这样,你就不用再为每个POM重复配置仓库。



3.3上传构件至远程仓库

我们需要配置POM的distributionManagement来指定Maven分发构件的位置,如下:

Xml代码  收藏代码
  1. <project>    
  2.   ...    
  3.   <distributionManagement>    
  4.     <repository>    
  5.       <id>my-repo</id>    
  6.       <name>Release Repository</name>    
  7.       <url>http://localhost:8081/artifactory/my-repo</url>    
  8.     </repository>    
  9.    
  10.   ...    
  11. </project>    


一般来说,分发构件到远程仓库需要认证,如果你没有配置任何认证信息,你往往会得到401错误。这个时候,如下在settings.xml中配置认证信息:

Xml代码  收藏代码
  1. <settings>    
  2.   ...    
  3.   <servers>    
  4.     <server>    
  5.       <id>my-repo</id>    
  6.       <username>admin</username>    
  7.       <password>password</password>    
  8.     </server>       
  9.   ...    
  10. </settings>  

需要注意的是,settings.xml中server元素下id的值必须与POM中repository或snapshotRepository下id的值完全一致。将认证信息放到settings下而非POM中,是因为POM往往是它人可见的,而settings.xml是本地的。


maven3实战之仓库(maven仓库分类)

转自:http://www.cnblogs.com/crazy-fox/archive/2012/02/07/2341813.html
----------
对于maven来说,仓库只分为两类:本地仓库和远程仓库。当maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有需要的构件,maven就会报错。
在这个最基本分类的基础上,还有必要介绍一些特殊的远程仓库。中央仓库是maven核心自带的远程仓库,它包含了绝大部分开源的构件。在默认配置下,当本地仓库没有maven需要的构件的时候,它就会尝试从中央仓库下载。私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。除了中央仓库和私服,还有很多其他公开的远程仓库,常见的有java.net Maven库(http://download.java.net/maven/2/)和jboss Maven库(http://repository.jboss.com/maven2/)等。

1.本地仓库
默认情况下,不管是在windows还是linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。有时候,因为某些原因(例如C盘空间不够),用户会想要自定义本地仓库目录地址。这时,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址。例如:

Xml代码 
  1. <settings>  
  2.     <localRepository>D:\java\repository\</localRepository>  
  3. </settings>  

这样,该用户的本地仓库地址就被设置成了 D:\java\repository\。需要注意的是,默认情况下,~/.m2/settings.xml文件是不存在的,用户需要从Maven安装目录复制$M2_HOME/conf/settings.xml文件再进行编辑。
一个构件只有在本地仓库中之后,才能由其他Maven项目使用,那么构件如何进入到本地仓库中呢?最常见的是依赖Maven从远程仓库下载到本地仓库中。还有一种常见的情况是,将本地项目的构件安装到Maven仓库中。例如本地有两个项目A和B,两者都无法从远程仓库获得,而同时A又依赖于B,为了能构建A,B就必须首先得以构建并安装到本地仓库中。为了安装项目,我们可以在项目中执行: mvn clean install命令。Install插件的install目标将项目的构建输出文件安装到本地仓库。

2.远程仓库
安装好Maven后,如果不执行任何Maven命令,本地仓库目录是不存在的。当用户输入第一条Maven命令之后,Maven才会创建本地仓库,然后根据配置和需要,从远程仓库下载构件至本地仓库。

3.中央仓库
由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置。读者可以使用解压工具打开jar文件$M2_HOME/lib/maven-model-builder-3.0.jar(在Maven2中,jar文件路径类似于$M2_HOME/lib/maven-2.2.1-uber.jar),然后访问路径:org/apache/maven/model/pom-4.0.0.xml,可以看到如下的配置:

 

Xml代码 
  1. <repositories>  
  2.     <repository>  
  3.         <id>central</id>  
  4.         <name>Maven Repository Switchboard</name>  
  5.         <url>http://repo1.maven.org/maven2</url>  
  6.         <layout>default</layout>  
  7.         <snapshots>  
  8.             <enabled>false</enabled>  
  9.         </snapshots>  
  10.     </repository>  
  11. </repositories>  

包含这段配置的文件是所有Maven项目都会继承的超级POM。这段配置使用id central对中央仓库进行唯一标识,其名称为Maven Repository Switchboard,它使用default仓库布局。最后需要注意的是snapshots元素,其子元素enabled的值为false,表示不从该中央仓库下载快照版本的构件【快照版本的项目是版本不稳定的项目,所以中央仓库默认是关闭的】。

4.私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。此外,一些无法从外部仓库下载到的构件也能从本地上传到私服上供大家使用。



文明使用中央Maven仓库

转自:http://juvenshun.iteye.com/blog/236511

http://repo1.maven.org/maven2/ 是中央Maven仓库,里面包含了绝大多数的开源构件,及源码,作者信息,SCM信息,等等。每个月这里大概会接受全世界java程序员1亿次的点击,因此,它对全世界java开发者的贡献,是不言而喻的。

 

但如此大的访问量无疑存在潜在的危险,Maven中央仓库是开放的,任何人可以通过任何方式去那里下载资源,但它也有自己的承受能力,如果连接过多,则会瘫痪,这种情况,已经发生过很多次。

 

一个典型的反面教材是:一个公司或组织,有很多人使用Maven,项目会需要下载很多构件,但没有建立一个自己的仓库管理器,所有人都重复的从中央仓库下载构件(如果你不进行任何配置,Maven默认从中央仓库下载依赖构件)。因为连接过多,中央仓库管理员发现了这个IP消耗了过多资源,只能选择封IP,可能封一个月,可能永久。任何一个IP,请求过多的连接资源,可能影响它人使用中央仓库的时候,就会得到这个下场。

 

中国的Maven用户已经很多,而且这个用户群每天都在增长,我对Maven在中国的未来充满信心。可中国如此庞大的java开发群体,如果普遍不使用仓库管理器,直接访问中央仓库,势必对该仓库是一个严峻的挑战。因此,请大家文明使用中央仓库,为自己的公司或组织建立仓库管理器

 

如果谁有意向帮助建立一个Maven仓库中国的镜像,将对Maven社区是一个伟大的贡献,请和我联系,谢谢。




以上转自:http://blog.csdn.net/dongnan591172113/article/details/7685164
0 0