Maven 最佳实践 maven仓库 1
Maven最佳实践:maven仓库-12010年07月13日星期二下午11:39在
POM中配置远程仓库
前面我们看到超级POM配置了ID为central的远程仓库,我们可以在POM
中配置其它的远程仓库。这样做的原因有很多,比如你有一个局域网的远程仓
库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖的
一个jar在central中找不到,它只存在于某个特定的公共仓库,这样你也不
得不添加那个远程仓库的配置。
这里我配置一个远程仓库指向中央仓库的中国镜像:
Xml代码projectrepositoriesrepositoryidmaven-net-cn/idnameMaven
China
Mirror/name/enabled/releasessnapshotsenabledfalse/enabled/snapshots/r
epository/repositoriespluginRepositoriespluginRepositoryidmaven-net-
cn/idnameMaven China
Mirror/name/enabled/releasessnapshotsenabledfalse/enabled/snapshots/p
luginRepository/pluginRepositories/project我们先看一下repositories
的配置,你可以在它下面添加多个repository,每个repository都有它唯一
的ID,一个描述性的name,以及最重要的,远程仓库的url。此外,releases
enabled true/enabled/releases告诉Maven可以从这个仓库下载releases版
本的构件,而snapshots enabled false/enabled/snapshots告诉Maven不要
从这个仓库下载snapshot版本的构件。禁止从公共仓库下载snapshot构件是
推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,
如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持。
关于repositories的更详细的配置及相关解释,请参考:。
至于pluginRepositories,这是配置Maven从什么地方下载插件构件(Maven的所有实际行为都由其插件完成)。该元素的内部配置和repository完全一样,不再解释。
在settings.xml中配置远程仓库
我们知道了如何在POM中配置远程仓库,但考虑这样的情况:在一个公司内部,同时进行这3个项目,而且以后随着这几个项目的结束,越来越多的项目会开始;同时,公司内部建立一个Maven仓库。我们统一为所有这些项目配置该仓库,于是不得不为每个项目提供同样的配置。问题出现了,这是重复~
其实我们可以做到只配置一次,在哪里配置呢?就是settings.xml。
不过事情没有那么简单,不是简单的将POM中的repositories及pluginRepositories元素复制到settings.xml中就可以,setting.xml不直接支持这两个元素。但我们还是有一个并不复杂的解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,就是利用profile,如下:
Xml代码settingsprofilesprofileiddev/id~--repositories and pluginRepositories here--
/profile/profilesactiveProfilesactiveProfiledev/activeProfile/activeP
rofiles/settings这里我们定义一个id为dev的profile,将所有repositories以及pluginRepositories元素放到这个profile中,然后,使用activeProfiles元素自动激活该profile。这样,你就不用再为每个POM重复配置仓库。
使用profile为settings.xml添加仓库提供了一种用户全局范围的仓库配置。
镜像
如果你的地理位置附近有一个速度更快的central镜像,或者你想覆盖central仓库配置,或者你想为所有POM使用唯一的一个远程仓库(这个远程仓库代理的所有必要的其它仓库),你可以使用settings.xml中的mirror配置。
以下的mirror配置用maven.net.cn覆盖了Maven自带的central:
Xml代码settingsmirrorsmirroridmaven-net-cn/idnameMaven China Mirror/name/mirrorOf/mirror/mirrors/settings这里唯一需要解释的是
mirrorOf,这里我们配置central的镜像,我们也可以配置一个所有仓库的镜
像,以保证该镜像是Maven唯一使用的仓库:
Xml代码settingsmirrorsmirroridmy-org-repo/idnameRepository in My
Orgnization/name/mirrorOf/mirror/mirrors/settings关于更加高级的镜像
配置,可以参考:。
分发构件至远程仓库
mvn install会将项目生成的构件安装到本地Maven仓库,mvn deploy用
来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当
前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使
用你的构件。
我们需要配置POM的distributionManagement来指定Maven分发构件的位
置,如下:
Xml代码projectdistributionManagementrepositoryidnexus-releases/idnameNexus Release
Repository/name/repositorysnapshotRepositoryidnexus-snapshots/idnameNexus Snapshot
Repository/name/snapshotRepository/distributionManagement/projectMave
n区别对待release版本的构件和snapshot版本的构件,snapshot为开发过程
中的版本,实时,但不稳定,release版本则比较稳定。Maven会根据你项目的
版本来判断将构件分发到哪个仓库。
一般来说,分发构件到远程仓库需要认证,如果你没有配置任何认证信息,
你往往会得到401错误。这个时候,如下在settings.xml中配置认证信息:
Xml代码settingsserversserveridnexus-
releases/idusernameadmin/usernamepasswordadmin123/password/serverserv
eridnexus-
snapshots/idusernameadmin/usernamepasswordadmin123/password/server/se
rvers/settings需要注意的是,settings.xml中server元素下id的值必须与POM中repository或snapshotRepository下id的值完全一致。将认证信息放到settings下而非POM中,是因为POM往往是它人可见的,而settings.xml是本地的。
小结
本文介绍了Maven仓库,它是什么?本地仓库,远程仓库,中央仓库具体是
并介绍了如何在POM中配置项目层次的仓库,在settings中配置用户指什么?
层次的仓库,以及mirror。本文还介绍了如何安装构件到本地仓库,如何分发构件至仓库。