maven2 比起maven1 来说,需要配置的文件少多了,主要集中在pom.xml和settings.xml中。
先来说说settings.xml,settings.xml对于maven来说相当于全局性的配置,用于所有的项目。在maven2中存在两个settings.xml,一个位于maven2的安装目录conf下面,作为全局性配置。对于团队设置,保持一致的定义是关键,所以maven2/conf下面的settings.xml就作为团队共同的配置文件。保证所有的团队成员都拥有相同的配置。当然对于每个成员,都需要特殊的自定义设置,如用户信息,所以另外一个settings.xml就作为本地配置。默认的位置为:${user.dir}/.m2/settings.xml
目录中(${user.dir}
指windows 中的用户目录)。
settings.xml基本结构如下:
简单介绍一下几个主要的配置因素:
localRepository:
表示本地库的保存位置,也就是maven2主要的jar保存位置,默认在${user.dir}/.m2/repository
,如果需要另外设置,就换成其他的路径。
注:个人推荐修改改配置。就像我不喜欢把应用程序装到C盘一样,我也不喜欢把本地库放到C盘,所以我总是会修改该配置。如果不幸重装系统的话,第一构建项目时又要重新下载所有依赖,那等待的时间够喝两壶咖啡了。
interactiveMode:
如果Maven要试图与用户交互来得到输入就设置为true,否则就设置为false,默认为true。
usePluginRegistry:
如果Maven使用${user.home}/.m2/plugin-registry.xml来管理plugin的版本,就设置为true,默认为false。
offline:
如果构建系统要在离线模式下工作,设置为true,默认为false。如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,那么这个设置是非常有用的。
pluginGroups
这个元素包含了一系列pluginGroup元素,每个又包含了一个groupId。当一个plugin被使用,而它的groupId没有被提供的时候,这个列表将被搜索。这个列表自动的包含了org.apache.maven.plugins和org.codehaus.mojo。
…
例如,有了上面的配置,Maven命令行可以使用简单的命令执行org.morbay.jetty:jetty-maven-plugin:run
,如下 :
mvn jetty run
Servers
用来下载和部署的仓库是用POM中的repositories和distributionManagement元素来定义的。但是某些配置例如username和password就不应该随着pom.xml来分配了。这种类型的信息应该保存在构建服务器中的settings.xml中。
另外,如果你使用maven-tomcat-plugin,但又不想使用嵌入式运行的方式,那么就需要在此处配置一个tomcat server 。
id:
这是Server的ID(不是登录进来的user),与Maven想要连接上的repository/mirror中的id元素相匹配。
username,password:
这两个元素成对出现,表示连接这个server需要验证username和password。
privateKey,passphrase:
与前两个元素一样,这两个成对出现,分别指向了一个私钥(默认的是${user.home}/.ssh/id_dsa)和一个passphrase。passphrase和password元素可能在将来被客观化,但是现在必须以文本形式在settings.xml中设置。
filePermissions,directoryPermissions:
当一个仓库文件或者目录在部署阶段被创建的时候,就必须用到权限许可。他们合法的值是三个数字,就像*nix中的文件权限,例如:664,775.
注意:如果你使用了一个私钥来登录server,那么password元素必须被省略,否则私钥将被忽视。
密码加密
一个新特征:服务器password和passphrase加密已经被升到2.1.0+
Mirrors
表示镜像库,指定库的镜像,用于增加其他库。
id,name:
唯一的镜像标识和用户友好的镜像名称。id被用来区分mirror元素,并且当连接时候被用来获得相应的证书。
url:
镜像基本的URL,构建系统敬将使用这个URL来连接仓库,而不是原来的仓库URL。
mirrorOf:
镜像所包含的仓库的Id。例如,指向Maven central仓库的镜像(http://repo1.maven.org/maven2/),设置这个元素为central。更多的高级映射例如repo1,repo2 或者*,!inhouse都是可以的。没必要一定和mirror的id相匹配。
Proxies
通过代理访问指定的中心库。
id:
代理的标志
active:
是否激活代理
protocol, host, port:
protocol://host:port 代理
username, password:
用户名和密码
nonProxyHosts:
不需要代理的host
profiles
settings.xml中的profile是pom.xml中的profile的简洁形式。它包含了激活(activation),仓库(repositories),插件仓库(pluginRepositories)和属性(properties)元素。profile元素仅包含这四个元素是因为他们涉及到整个的构建系统,而不是个别的POM配置。
如果settings中的profile被激活,那么它的值将重载POM或者profiles.xml中的任何相等ID的profiles。
激活(activation)
activations是profile的关键,就像POM中的profiles,profile的能力在于它在特定情况下可以修改一些值。而这些情况是通过activation来指定的。
…
…
如果所有指定的条件都达到了,那么,activation就被触发,而且不需要一次性全部达到。
jdk:
在jdk元素中,activation有一个内建的,java版本检测。如果检测到jdk版本与期待的一样,那么就激活。在上面的例子中,1.5.0_06是满足的。
os:
os元素可以定义一些上面所示的操作系统特定的属性。
property:
如果Maven检测到相应的名值对的属性,那么,这个profile将被激活。
file:
如果给定的文件存在,或者不存在那么将激活这个profile。
activation并不是唯一激活profile的途径。settings.xml中的activeProfile包含了profile的id。他们也可以通过命令行来显式的激活,例如-P test
。
如果你想查看在一个构建过程中有哪些profile会被激活。就使用maven-help-plugin :
mvn help:active-profiles
属性(properites)
Maven的属性是值占位符,就像Ant中的属性。如果X是一个属性的话,那么它的值在POM中可以使用${X}来进行任意地方的访问。他们来自于五种不同的风格,所有都可以从settings.xml文件中访问到。
1.env.X:
使用“env.”前缀将会返回当前的环境变量。例如${env.PATH}就是使用了$path环境变量。
2.project.X:
一个点“.”分割的路径,在POM中就是相关的元素的值。例如:
3.settings.X:
一个点“.”分割的路径,在settings.xml中就是相对应的元素的值,例如:
4.Java系统属性:
所有通过java.lang.System.getProperties()来访问的属性都可以像POM中的属性一样访问,例如:${java.home}
5.X:
被
…
如果这个profile被激活,那么属性${user.install}就可以被访问了。
仓库(repositories)
仓库是Maven用来构筑构建系统的本地仓库的远程项目集合。它来自于被Maven叫做插件和依赖的本地仓库。不同的远程仓库包含不同的项目,当profile被激活,他们就会需找匹配的release或者snapshot构件。
…
3
releases,snapshots:
这是各种构件的策略,release或者snapshot。因了这两个集合,POM可以在单个的仓库中不依赖于另外一个的策略而改变当前策略。例如:一个人可能只下载snapshot用来开发。
enable:
true或者false,来标记仓库是否为各自的类型激活(release 或者 snapshot)。
updatePolicy:
这个元素指明了更新的频率。Maven会比较本地POM与远程的时间戳。可选的项目为:always,daily,interval:X,nerver。
checksumPolicy:
当Maven向仓库部署文件的时候,它也部署了相应的校验和文件。可选的为:ignore,fail,warn,或者不正确的校验和。
layout:
在上面描述仓库的时候,我们提到他们有统一的布局。这完全正确。使用这个来表明它是default还是legacy。
插件仓库(plugin repositories)
仓库包含了两种重要类型的构件。第一种是用来做其他构件依赖的构件,这是在中央仓库中的大多数插件。另外一种类型的构件就是插件。Maven的插件本身就是一种特殊的构件。因此,插件仓库被从其他仓库中分离出来。无论怎么说,pluginRepositories元素模块的结构与repositories模块很相似。pluginRepository元素指向一个可以找到新插件的远程地址。
激活配置(Active Profiles)
…
settings.xml最后一个谜题是activeProfiles元素。它包含一系列的activeProfile元素,每个都有一个profile id的值,任何profile id被定义到activeProfile的profile将被激活,不管其他的环境设置怎么样。如果没有匹配的profile被找到,那么就什么事情也不做。例如:如果env-test是一个activeProfile,一个在pom.xml或者profile.xml中的具有相应id的profile将被激活。如果没有这样的profile被找到,就什么事也不做,一切照常。
[参考链接:http://maven.apache.org/settings.html]
分类目录
- arch/management (17)
- computer (38)
- java/j2ee (304)
- lnmpa (237)
- mac/iphone/ipad/android (11)
- mysql/oracle/postgresql (126)
- os/software (74)
- other (518)
- python (6)
- redis/memcached/mongo (31)
- sitebuild (143)
随便看看
标签云
程序员 创业 人生箴言 eclipse 快捷键 术语 索引 unix命令 vim wordpress java学习笔记 环境变量 oracle内置函数 index 人生 数据类型 nohup tuxedo mysql学习笔记 MS-DOS命令 servlet spring 职场进阶 职业进阶 服务器选购 服务器选型 apache JPA MongoDB 注解 tomcat 子女教育 jquery maven JVM aix命令 网络营销 java异常 seo 人生规划 关键字 css 网络推广 struts 系统优化 成长 frame iframe bluehost jdbc select 我的信仰 oracle函数 cookie HashMap 站长工具 乱码 ArrayList secureCRT jsp session tail find halt 事务 oracle单记录函数 算法 URL window table javascript操作表单元素 String 字符串处理 健康 http 域名 情感 more google A记录 域名解析 netstat 弹出对话框 弹出窗口 框架集 框架 excel 字符串 javascript函数 showModalDialog nginx number 数组 sql frameset 开源程序 java数组 软件 oracle服务友情链接
收藏链接