首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Maven入门实战札记04-仓库

2013-03-13 
Maven入门实战笔记04-仓库?仓库区分 坐标和依赖与仓库构件的逻辑表示方式:坐标和依赖构件的物理表示方式:

Maven入门实战笔记04-仓库

?

仓库

区分 坐标和依赖与仓库

构件的逻辑表示方式:坐标和依赖

构件的物理表示方式:文件(Maven通过仓库来统一管理文件)

?

1.仓库

Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库

2.仓库的布局

groupId/artifactId/version/artifactId-version.packaging

3.仓库的分类

本地仓库

默认本场仓库目录 :用户名/.m2/repository

自定义本地仓库目录地址,编辑文件~/.m2/settings.xml

?

<settings>  <localRepository>D:\java\respository</localRepository></settings>

?将本地项目的构件装到Maven仓库中

mvn clean install

?该命令将项目的构件输出文件安装到本地仓库中

?

远程仓库

安装好 Maven后,本地仓库目录是不存在的,当输入第一条Maven命令后,Maven才会创建本地仓库,根据配置和需要,从远程仓库下载构件至本地仓库

中央仓库

Maven必须知道至少一个可用的远程仓库

中央仓库是一个默认的远程仓库,Maven安装文件自带了中央仓库的位置

%M2_HOME%/lib/maven-model-builder-3.0.5.jar中

org\apache\maven\model\pom-4.0.0.xml

?

  <repositories>    <repository>      <id>central</id>      <name>Central Repository</name>      <url>http://repo.maven.apache.org/maven2</url>      <layout>default</layout>      <snapshots>        <enabled>false</enabled>      </snapshots>    </repository>  </repositories>

?包含这段配置的文件是所有Maven项目都会继承的超级POM

?

私服

一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用

优点:节省自己的外网带宽、加速Maven构建、部署第三方构件、提高稳定性,增强控制、降低中央仓库的负荷

4.远程仓库的配置

配置JBoss Maven仓库,在POM中配置

?

<project><repositories><repository><id>jboss</id><name>JBoss Repository</name><url>http://repository.jboss.com/</url><releases><enabled>true</enabled></releases></repository><snapshots><enabled>false</enabled><updatePolicy>daily</updatePolicy><checksumPolicy>ignore</checksumPolicy></snapshots><layout>default</layout></repositories></project>

?

?

如上配置:Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件

default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局(不明白)

updatePolicy:daily(默认),never,always,interval:X(每隔X分钟检查一次更新)

checksumPolicy:warn(默认),fail,ignore

远程仓库的认证

配置仓库信息可以直接配置在POM文件中,认证信息必须配置在settings.xml中(POM往往被提交到代码仓库中供所有成员访问的,而settings.xml一般只放在本机)

demo,编辑settings.xml

?

<settings><servers><server><id>my-proj</id><username>admin</username><password>password</password></server></servers></settings>

?

?

部署至远程仓库

Maven对项目进行编译、测试、打包外,还能将项目生成的构建部署到仓库中

编辑项目的pom.xml文件

?

<project><distributionManagement><repository><id>proj-releases</id><name>Proj Release Repopsitory</name><url>http://192.168.1.100/content/repositories/proj-releases/</url></repository><snapshotRepository><id>proj-snapshots</id><name>Proj Snapshot Repopsitory</name><url>http://192.168.1.100/content/repositories/proj-snapshots/</url></snapshotRepository></distributionManagement></project>

需要认证时,需配置认证信息

?

配置正确后,运行命令

mvn clean deploy

?

?

5.快照版本

为什么区分发布版和快照版?例小张开发模块A的2.1版本,小季开发模块B,B依赖于A,小张需要将最新的构建输出,交给小季,供其开发和集成高度,工作如何进行?

Maven的快照版本机制:

小张将模块A的版本设定为2.1-SNAPSHOT,然后发布到私服中,在发布过程中,Maven会自动为构件打上时间戳。如2.1-20130309.233559-12表示2013年03月09日23点35分59秒的第12次快照;小季配置对于模块A的2.1-SNAPSHOT的最新构件,当发现有更新时便进行下载。默认情况下,Maven每天检查一次更新(由仓库配置的upldatePolicy控制),用户也可以使用命令行-U参数强制让Maven检查更新,如

mvn clean install -U

?当项目需要发布时,将快照版本更改为发布版本。例如将2.1-SNAPSHOT更改为2.1,表示该版本已经稳定且对应了唯一的构件;2.1-SNAPSHOT往往对应了大量的带有不同时间戳的构件,这也决定了其不稳定性

?

快照版本只应该在组织内部的项目或模块间依赖使用(组织对于这些快照版本的依赖具有完全的理解及控制权)

项目不应该依赖于任何组织外部的快照版本依赖(快照版本的不稳定性,造成潜在危险)

6.从仓库解析依赖的机制

仓库元数据groupId/artifactId/versionmaven-metadata.xml

RELEASE:最新发布版本

LATEST:最新版本(包含快照)

依赖声明中使用LATEST和RELEASE是不推荐的做法(因为Maven随时都可能解析到不同的构件)

7.镜像

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像

如:http://maven.net.cn/content/groups/public/是中央仓库http://repo1.maven.org/maven2/在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务

编辑settings.xml

?

<settings><mirrors><mirror><id>maven.net.cn</id><name>one of the central mirrors in China</name><url>http://maven.net.cn/content/groups/public</url><mirrorOf>central</mirrorOf></mirror></mirrors></settings>

?<mirrorOf>值为central表示该配置为中央仓库的镜像

注:http://maven.net.cn/content/groups/public/这个镜像现在好像不能用了

?

如镜像需要认证,也可以基于该id配置仓库认证

镜像的一个常见应用:结合私服

如:

<settings><mirrors><mirror><id>internal-repository</id><name>Internal Repository Manager</name><url>http://192.168.1.100/maven2/</url><mirrorOf>*</mirrorOf></mirror></mirrors></settings>

?<mirrorOf>值为星号,表示该配置是所有Maven仓库的镜像,任何远程仓库的请求都会被转至http://192.168.1.100/maven2/。

?

如果该镜像仓库需要认证,则配置一个id为internal-repository的<server>即可

更高级的镜像配置:

?

<mirrorOf>*</mirrorOf>匹配所有远程仓库<mirrorOf>external:*</mirrorOf>匹配所有远程仓库,使用localhost、file://协议的除外,即匹配所有不在本机上的远程仓库<mirrorOf>repo1,repo2</mirrorOf>匹配仓库repo1和repo2<mirrorOf>*,!repo1</mirrorOf>匹配所有远程仓库,repo1除外

?

?

注意:由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库出问题时,Maven仍将无法访问被被镜像仓库,因而将无法下载构件

8.仓库的搜索服务

Sonatype Nexus??? http://repository.sonatype.org/

Jarvana????????????????? http://www.jarvana.com/jarvana/

MVNbrowser???????? http://mvnbrowser.com/

MVNrepository????? http://mvnrepository.com/

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

@author Free Coding http://ln-ydc.iteye.com/

?

?

热点排行