持续集成中MAVEN的那些事儿

Posted Qtest之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持续集成中MAVEN的那些事儿相关的知识,希望对你有一定的参考价值。

持续集成中MAVEN的那些事儿(一)

序言

持续集成中MAVEN的那些事儿(一)


     相信大家对项目依赖的管理或多或少都知道一些,那么大家一定听过maven——这一Java 社区标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。小编之前也用过maven,但仅停留在用过,对maven具体的配置都是直接copy了事,里面的配置项也是傻傻分不清楚。最近在研究使用nexus本地私服进行插件上传和下载的项目,为了解决看到settings.xml配置文件就头疼的困境,专门学习了下官方的文档,顿觉醍醐灌顶。本文梳理了settings.xml文件各个属性的具体意义以及使配置方法,希望大家能从本文中获得有价值的参考。


持续集成中MAVEN的那些事儿(一)


持续集成中MAVEN的那些事儿(一)

概述

持续集成中MAVEN的那些事儿(一)


settings.xml文件中settings元素包含用于定义各种属性的父级元素,这些属性可以让Maven通过不同方式执行(类似pom.xml),但是settings.xml不应该绑定到任何指定的项目上或分发给一个用户。其中包括本地仓库存储位置,备用远程仓库服务器以及身份验证信息等父级元素。


settings.xml文件可能存在两个位置中:

  • 安装目录:${maven.home}/conf/settings.xml

  • 用户安装目录:${user.home}/.m2/settings.xml


前一个settings.xml也被称为全局配置,后一个settings.xml被称为用户配置。如果两个文件都存在,它们的内容将被合并,用户指定的settings.xml主导地位,会覆盖全局配置。


备注:如果你需要从头开始创建用户指定配置,将全局配置从Maven安装目录中复制到 ${user.home}/.m2 目录中是最简单的方法。Maven默认settings.xml文件 是一个包含注释和示例的模板,因此可以快速的修改来满足你的需求。


以下是settings下的顶级元素概述:


持续集成中MAVEN的那些事儿(一)


可以将如下表达式来插入settings.xml文件中:

  • ${user.home}和其他系统配置(从Maven 3.0版本开始)

  • ${env.HOME}等环境变量


备注:settings.xml文件中标签profile中的属性property不能使用上述方式。


持续集成中MAVEN的那些事儿(一)

详情

持续集成中MAVEN的那些事儿(一)


持续集成中MAVEN的那些事儿(一)

2.1 单级元素


一半的父级 settings元素都属于单级元素,它们在服务构建过程中永久生效。


持续集成中MAVEN的那些事儿(一)


(1) localRepository


表示构建系统本地仓库的路径。默认值为${user.home}/.m2/repository。这个元素对于构建服务器特别有用,允许所有登录用户从一个本地仓库进行构建。


(2) interactiveMode


Maven是否需要和用户交互以获得输入。如果需要,该值为true,否则为false。默认为true。


(3) usePluginRegistry


Maven是否使用${user.home}/.m2/plugin-registry.xml文件来管理插件版本,如果需要,该值为true默认为false。请注意,对于Maven 2.0的当前版本,不需要lugin-registry.xml文件。


(4) offline


Maven是否需要在离线模式下运行,如果需要,该值为true,否则为false。此元素对于构建服务器时,由于网络设置或安全原因不能连接到远程仓库时非常有用。


持续集成中MAVEN的那些事儿(一)

2.2 Plugin Groups 插件组


该元素包含pluginGroup元素的列表,每个pluginGroup都有一个groupId。当在在命令行中使用插件并没有提供groupId时,会搜索该列表。这个列表自动包含org.apache.maven.plugins和org.codehaus.mojo。


持续集成中MAVEN的那些事儿(一)


例如,给定上述配置, Maven命令行可以使用如下简短命令来运行org.mortbay.jetty:jetty-maven-plugin:run:


持续集成中MAVEN的那些事儿(一)


持续集成中MAVEN的那些事儿(一)

2.3 Servers 服务器


下载和部署仓库是由POM的repositories和distributionManagement元素定义。但是,某些配置(如用户名和密码)不应该在pom.xml上配置 。这种类型的信息可以在settings.xml中server上配置。


持续集成中MAVEN的那些事儿(一)


(1) id


服务端server的Id(不是登录用户的Id),与Maven尝试连接的仓库/镜像的id元素匹配。


(2) username, password


这两个元素是成对出现的,表示服务器进行身份验证所需的登录名和密码。


(3) privateKey, passphrase


与前两个元素一样,这两个元素也是成对出现。指定了私钥的路径(默认为${user.home}/.ssh/id_dsa)以及一个passphrase (需要时提供)。passphrase和password可能在不久的将来可以存储在外部,但是目前它们只能在settings.xml文件中以纯文本的形式出现。


(4) filePermissions, directoryPermissions


在部署时创建仓库文件或目录,需要使用权限,这两个元素指定了创建的文件或目录的权限。它们的合法值是一个三位数数字,对应于 *nix(unix或linux)文件权限,例如上述配置中的664或775。


持续集成中MAVEN的那些事儿(一)

2.4 Mirrors 镜像

持续集成中MAVEN的那些事儿(一)

(1) id, name


镜像的唯一标识符和名称。id 用来区分不同 mirror 元素,以及在连接镜像时从 <servers> 中选择相应的认证。


(2) url


镜像的URL。构建系统使用此URL来连接到仓库,而不是使用原始仓库的URL。


(3) mirrorOf


被镜像的仓库id。例如,指向 Maven central 仓库(https://repo.maven.apache.org/maven2/)的镜像,就将此元素设置为central。更高级的映射,如repo1,repo2或 *,!inhouse也是可以的。这不能与镜像id一致。


有关更深入的镜像介绍,请阅读镜像设置指南。


持续集成中MAVEN的那些事儿(一)

2.5 Proxies 代理

持续集成中MAVEN的那些事儿(一)

(1) id


代理的唯一标识符。这用于区分不同 proxy 元素。


(2) active


是否需要激活该代理,如果需要,则为 true。这在声明一组代理时是非常有用的,一组代理只能激活一个,可以使用该元素来控制激活哪个代理。


(3) protocol, host, port


代理的protocol://host:port,分隔成离散的元素(protocol协议,host主机名,port端口)以方便配置。


(4) username, password


这两个元素成对出现,表示代理服务器进行身份验证所需的登录名和密码。


(5) nonProxyHosts


不被代理的主机名列表。列表的分隔符是代理服务器的指定类型,即由代理服务器指定; 在上面的例子中分隔符为|,以逗号分隔也是经常见的。


持续集成中MAVEN的那些事儿(一)

2.6 Profiles


settings.xml中的profile元素是pom.xml中profile元素的删减版本。由activation,repositories,pluginRepositories和properties元素组成。profile元素只包含这四个元素,因为这里只关心构建系统的整体(这正是settings.xml文件的角色定位),而不关心个别项目对象模型的设置。


如果settings中的一个profile被激活,那么其值将会覆盖POM或profiles.xml文件中相同的ID的profile。


2.6.1 Activation


activation是profile的关键。与POM的profile一样, profile的作用在于它能够在一些特定情况下修改元素值。这些特定情况正是通过activation元素指定的(译者注:activation指定了激活profile的条件)。


持续集成中MAVEN的那些事儿(一)


当activation所有指定的条件都被满足的时,对应的profile会被激活,尽管不需要所有的条件都必须得到满足。


(1) jdk


activation在jdk元素中内置了一个Java版本检测。如果jdk版本号与给定的前缀相匹配,profile将被激活。在上面的例子中,1.5.0_06会匹配。Maven 2.1也支持范围值。有关可支持的范围的更多详细信息,请参阅maven-enforcer-plugin。


(2) os


os元素可以定义如上显示的一些操作系统特定属性。有关OS值的更多细节,请参阅maven-enforcer-plugin。


(3) property


如Maven检测到某一个对应name=value格式的属性(其值可以在POM中通过 ${name} 引用),profile就会被激活。


(4) file


最后,通过检测给定的文件存在或丢失来激活profile。exists表示如果指定的文件存在,则激活profile,missing表示如果指定的文件不存在,则激活profile。


activation元素不是激活profile的唯一方法。settings.xml文件的activeProfile元素可能会包含profile 的 id,从而激活该profile。它们也可以使用-P标志后逗号分隔的列表的命令行方式激活profile(例如 -P test )。


2.6.2 Properties


Maven属性是值占位符,就像Ant中的属性一样。可以在POM中的任何地方通过使用${X}符号来访问这些值,其中X是属性名称。有五种不同样式的属性,都可以通过settings.xml文件访问:


  • env.X :以env. 前缀的变量返回一个shell环境变量。 例如,${env.PATH} 包含$path环境变量(Windows 中的 %PATH%)。

  • project.x :指定了POM中对应元素的值。例如:可通过${project.version}来访问<project><version>1.0</ version></ project>对应的值。

  • settings.x :指定了settings.xml中对应元素的值。例如:可通过${settings.offline} 来访问<settings><offline>false</ offline></ settings>对应的值。

  • Java系统属性:通过java.lang.System.getProperties()可以访问的所有属性都可用作POM的属性,如${java.home}。

  • x :在<properties />元素或外部文件中设置,该值可以通过${someVar}形式引用。


持续集成中MAVEN的那些事儿(一)


如果此profile被激活,那么可以在POM中访问其属性 ${user.install}。


2.6.3 Repositories


仓库是Maven用来填充构建系统本地仓库的项目的远程集合。来自于本地仓库的,Maven称之为插件和依赖。不同的远程仓库可能包含不同的项目,在激活profile下,可以用来搜索匹配的发行版或快照构件。


持续集成中MAVEN的那些事儿(一)


(1) releases, snapshots


上述是每种类型构件的下载策略(发行版还是快照)。有了这两个策略,POM就可以在一个仓库中改变每个类型的策略,而与其他无关。例如,可能决定只启用快照下载,用于开发目的。


(2) enabled


true或者false表示该仓库使用哪种策略()发行版或快照)。


(3) updatePolicy


表示更新发生的频率。Maven会将本地POM的时间戳(存储在仓库的 maven-metadata文件中)与远程的进行比较。选项有:always,daily(默认),interval:X(其中X是以分钟为单位的整数)或never。


(4) checksumPolicy


当Maven将文件部署到仓库时,同时也会部署相应的校验和文件。你可以在校验和丢失或者不正确的时候选择ignore, fail或者warn选项。


(5) layout


在上面对仓库的描述中,有人提到它们都遵循一个共同的布局。这在大部分情况下是正确的。 Maven2有一个默认的仓库布局;然而,Maven1.x 会有不同的布局。使用这个元素来指定它是默认布局还是遗留布局。


2.6.4 Plugin Repositories



持续集成中MAVEN的那些事儿(一)


持续集成中MAVEN的那些事儿(一)

2.7 Active Profiles


持续集成中MAVEN的那些事儿(一)
settings.xml最后一部分是activeProfiles元素。包含一组activeProfile元素,每个activeProfile元素都含有一个profile id(例如上述的env-test)。profile id对应的profile将不受任何环境设置的影响而被激活。如果没有找到匹配的profile,什么也不会发生。例如,上述的env-test是一个activeProfile,那么pom.xml 文件中对应的profile(或者带有对应id的profile.xml文件)将被激活,如果没有找到这个profile,将正常运行。


持续集成中MAVEN的那些事儿(一)

结束语


持续集成中MAVEN的那些事儿(一)

本文详述了settings.xml配置文件中的所有标签元素,但实际工作中我们通用的标签只有几种,大家可将本文作为一个使用说明书酌情查阅。如果大家对本文涉及的内容有其他的想法,欢迎留言交流,期待共同进步!



持续集成中MAVEN的那些事儿(一)



Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!

陪伴是最长情的告白

每日为你推送最in的测试技术


以上是关于持续集成中MAVEN的那些事儿的主要内容,如果未能解决你的问题,请参考以下文章

centos+Jenkins+maven搭建持续集成

Jenkins+Maven+Svn搭建持续集成环境持续集成和自动部署

持续集成 Gitlab-CI Maven部署至服务器

Jenkins——持续集成介绍及Jenkins安装部署(插件+用户权限+凭据+Maven打包)

Jenkins持续集成使用指南

Maven 多模块项目持续集成的标准实践