1. settings.xml有什么用?
  2. 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径。
  3.  
  4. settings.xml文件是干什么的,为什么要配置它呢?
  5. settings.xml的文件名就可以看出,它是用来设置maven参数的配置文件。并且,settings.xmlmaven的全局配置文件。而pom.xml文件是所在项目的局部配置。
  6. Settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。
  7.  
  8. settings.xml文件位置
  9. settings.xml文件一般存在于两个位置:
  10. 全局配置: ${M2_HOME}/conf/settings.xml
  11. 用户配置: {user.home} 和和所有其他系统属性只能在3.0+版本上使用。请注意windowsLinux使用变量的区别。
  12.  
  13. 配置优先级
  14. 需要注意的是:局部配置优先于全局配置。
  15. 配置优先级从高到低:pom.xml> user settings > global settings
  16. 如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。
  17.  
  18. settings.xml元素详解
  19. 顶级元素概览
  20. 下面列举了settings.xml中的顶级元素
  21.  
  22. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  23. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  24. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  25. https://maven.apache.org/xsd/settings-1.0.0.xsd">
  26. <localRepository/>
  27. <interactiveMode/>
  28. <usePluginRegistry/>
  29. <offline/>
  30. <pluginGroups/>
  31. <servers/>
  32. <mirrors/>
  33. <proxies/>
  34. <profiles/>
  35. <activeProfiles/>
  36. </settings>
  37. LocalRepository
  38. 作用:该值表示构建系统本地仓库的路径。
  39. 其默认值:~/.m2/repository
  40.  
  41. <localRepository>${user.home}/.m2/repository</localRepository>
  42. InteractiveMode
  43. 作用:表示maven是否需要和用户交互以获得输入。
  44. 如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true
  45.  
  46. <interactiveMode>true</interactiveMode>
  47. UsePluginRegistry
  48. 作用:maven是否需要使用plugin-registry.xml文件来管理插件版本。
  49. 如果需要让maven使用文件~/.m2/plugin-registry.xml来管理插件版本,则设为true。默认为false
  50.  
  51. <usePluginRegistry>false</usePluginRegistry>
  52. Offline
  53. 作用:表示maven是否需要在离线模式下运行。
  54. 如果构建系统需要在离线模式下运行,则为true,默认为false
  55. 当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。
  56.  
  57. <offline>false</offline>
  58. PluginGroups
  59. 作用:当插件的组织idgroupId)没有显式提供时,供搜寻插件组织IdgroupId)的列表。
  60. 该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织IdgroupId)。
  61. 当我们使用某个插件,并且没有在命令行为其提供组织IdgroupId)的时候,Maven就会使用该列表。默认情况下该列表包含了org.apache.maven.pluginsorg.codehaus.mojo
  62.  
  63. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  64. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  65. https://maven.apache.org/xsd/settings-1.0.0.xsd">
  66. ...
  67. <pluginGroups>
  68. <!--plugin的组织IdgroupId -->
  69. <pluginGroup>org.codehaus.mojo</pluginGroup>
  70. </pluginGroups>
  71. ...
  72. </settings>
  73. Servers
  74. 作用:一般,仓库的下载和部署是在pom.xml文件中的repositoriesdistributionManagement元素中定义的。然而,一般类似用户名、密码(有些仓库访问是需要安全认证的)等信息不应该在pom.xml文件中配置,这些信息可以配置在settings.xml中。
  75.  
  76. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  77. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  78. https://maven.apache.org/xsd/settings-1.0.0.xsd">
  79. ...
  80. <!--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。 -->
  81. <servers>
  82. <!--服务器元素包含配置服务器时需要的信息 -->
  83. <server>
  84. <!--这是serverid(注意不是用户登陆的id),该iddistributionManagementrepository元素的id相匹配。 -->
  85. <id>server001</id>
  86. <!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 -->
  87. <username>my_login</username>
  88. <!--鉴权密码 。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。密码加密功能已被添加到2.1.0 +。详情请访问密码加密页面 -->
  89. <password>my_password</password>
  90. <!--鉴权时使用的私钥位置。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)以及如果需要的话,一个密语。将来passphrasepassword元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明。 -->
  91. <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
  92. <!--鉴权时使用的私钥密码。 -->
  93. <passphrase>some_passphrase</passphrase>
  94. <!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775 -->
  95. <filePermissions>664</filePermissions>
  96. <!--目录被创建时的权限。 -->
  97. <directoryPermissions>775</directoryPermissions>
  98. </server>
  99. </servers>
  100. ...
  101. </settings>
  102. Mirrors
  103. 作用:为仓库列表配置的下载镜像列表。
  104.  
  105. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  106. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  107. https://maven.apache.org/xsd/settings-1.0.0.xsd">
  108. ...
  109. <mirrors>
  110. <!-- 给定仓库的下载镜像。 -->
  111. <mirror>
  112. <!-- 该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
  113. <id>planetmirror.com</id>
  114. <!-- 镜像名称 -->
  115. <name>PlanetMirror Australia</name>
  116. <!-- 该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL -->
  117. <url>http://downloads.planetmirror.com/pub/maven2</url>
  118. <!-- 被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。 -->
  119. <mirrorOf>central</mirrorOf>
  120. </mirror>
  121. </mirrors>
  122. ...
  123. </settings>
  124. Proxies
  125. 作用:用来配置不同的代理。
  126.  
  127. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  128. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  129. https://maven.apache.org/xsd/settings-1.0.0.xsd">
  130. ...
  131. <proxies>
  132. <!--代理元素包含配置代理时需要的信息 -->
  133. <proxy>
  134. <!--代理的唯一定义符,用来区分不同的代理元素。 -->
  135. <id>myproxy</id>
  136. <!--该代理是否是激活的那个。true则激活代理。当我们声明了一组代理,而某个时候只需要激活一个代理的时候,该元素就可以派上用处。 -->
  137. <active>true</active>
  138. <!--代理的协议。 协议://主机名:端口,分隔成离散的元素以方便配置。 -->
  139. <protocol>http</protocol>
  140. <!--代理的主机名。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
  141. <host>proxy.somewhere.com</host>
  142. <!--代理的端口。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
  143. <port>8080</port>
  144. <!--代理的用户名,用户名和密码表示代理服务器认证的登录名和密码。 -->
  145. <username>proxyuser</username>
  146. <!--代理的密码,用户名和密码表示代理服务器认证的登录名和密码。 -->
  147. <password>somepassword</password>
  148. <!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。 -->
  149. <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
  150. </proxy>
  151. </proxies>
  152. ...
  153. </settings>
  154. Profiles
  155. 作用:根据环境参数来调整构建配置的列表。
  156. settings.xml中的profile元素是pom.xmlprofile元素的裁剪版本。
  157. 它包含了idactivationrepositoriespluginRepositories properties元素。这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同idprofile
  158.  
  159. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  160. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  161. https://maven.apache.org/xsd/settings-1.0.0.xsd">
  162. ...
  163. <profiles>
  164. <profile>
  165. <!-- profile的唯一标识 -->
  166. <id>test</id>
  167. <!-- 自动触发profile的条件逻辑 -->
  168. <activation />
  169. <!-- 扩展属性列表 -->
  170. <properties />
  171. <!-- 远程仓库列表 -->
  172. <repositories />
  173. <!-- 插件仓库列表 -->
  174. <pluginRepositories />
  175. </profile>
  176. </profiles>
  177. ...
  178. </settings>
  179. Activation
  180. 作用:自动触发profile的条件逻辑。
  181. pom.xml中的profile一样,profile的作用在于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。
  182. activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profileidprofile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。
  183.  
  184. <activation>
  185. <!--profile默认是否激活的标识 -->
  186. <activeByDefault>false</activeByDefault>
  187. <!--当匹配的jdk被检测到,profile被激活。例如,1.4激活JDK1.41.4.0_2,而!1.4激活所有版本不是以1.4开头的JDK -->
  188. <jdk>1.5</jdk>
  189. <!--当匹配的操作系统属性被检测到,profile被激活。os元素可以定义一些操作系统相关的属性。 -->
  190. <os>
  191. <!--激活profile的操作系统的名字 -->
  192. <name>Windows XP</name>
  193. <!--激活profile的操作系统所属家族(如 'windows') -->
  194. <family>Windows</family>
  195. <!--激活profile的操作系统体系结构 -->
  196. <arch>x86</arch>
  197. <!--激活profile的操作系统版本 -->
  198. <version>5.1.2600</version>
  199. </os>
  200. <!--如果Maven检测到某一个属性(其值可以在POM中通过${name}引用),其拥有对应的name = 值,Profile就会被激活。如果值字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段 -->
  201. <property>
  202. <!--激活profile的属性的名称 -->
  203. <name>mavenVersion</name>
  204. <!--激活profile的属性的值 -->
  205. <value>2.0.3</value>
  206. </property>
  207. <!--提供一个文件名,通过检测该文件的存在或不存在来激活profilemissing检查文件是否存在,如果不存在则激活profile。另一方面,exists则会检查文件是否存在,如果存在则激活profile -->
  208. <file>
  209. <!--如果指定的文件存在,则激活profile -->
  210. <exists>${basedir}/file2.properties</exists>
  211. <!--如果指定的文件不存在,则激活profile -->
  212. <missing>${basedir}/file1.properties</missing>
  213. </file>
  214. </activation>
  215. 注:在maven工程的pom.xml所在目录下执行mvn help:active-profiles命令可以查看中央仓储的profile是否在工程中生效。
  216.  
  217. properties
  218. 作用:对应profile的扩展属性列表。
  219. maven属性和ant中的属性一样,可以用来存放一些值。这些值可以在pom.xml中的任何地方使用标记${X}来使用,这里X是指属性的名称。属性有五种不同的形式,并且都能在settings.xml文件中访问。
  220.  
  221. <!--
  222. 1. env.X: 在一个变量前加上"env."的前缀,会返回一个shell环境变量。例如,"env.PATH"指代了$path环境变量(在Windows上是%PATH%)。
  223. 2. project.x:指代了POM中对应的元素值。例如: <project><version>1.0</version></project>通过${project.version}获得version的值。
  224. 3. settings.x: 指代了settings.xml中对应元素的值。例如:<settings><offline>false</offline></settings>通过 ${settings.offline}获得offline的值。
  225. 4. Java System Properties: 所有可通过java.lang.System.getProperties()访问的属性都能在POM中使用该形式访问,例如 ${java.home}。
  226. 5. x: 在<properties/>元素中,或者外部文件中设置,以${someVar}的形式使用。
  227. -->
  228. <properties>
  229. <user.install>${user.home}/our-project</user.install>
  230. </properties>
  231. 注:如果该profile被激活,则可以在pom.xml中使用${user.install}。
  232.  
  233. Repositories
  234. 作用:远程仓库列表,它是maven用来填充构建系统本地仓库所使用的一组远程仓库。
  235.  
  236. <repositories>
  237. <!--包含需要连接到远程仓库的信息 -->
  238. <repository>
  239. <!--远程仓库唯一标识 -->
  240. <id>codehausSnapshots</id>
  241. <!--远程仓库名称 -->
  242. <name>Codehaus Snapshots</name>
  243. <!--如何处理远程仓库里发布版本的下载 -->
  244. <releases>
  245. <!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 -->
  246. <enabled>false</enabled>
  247. <!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),intervalX(这里X是以分钟为单位的时间间隔),或者never(从不)。 -->
  248. <updatePolicy>always</updatePolicy>
  249. <!--当Maven验证构件校验文件失败时该怎么做-ignore(忽略),fail(失败),或者warn(警告)。 -->
  250. <checksumPolicy>warn</checksumPolicy>
  251. </releases>
  252. <!--如何处理远程仓库里快照版本的下载。有了releasessnapshots这两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的策略。例如,可能有人会决定只为开发目的开启对快照版本下载的支持。参见repositories/repository/releases元素 -->
  253. <snapshots>
  254. <enabled />
  255. <updatePolicy />
  256. <checksumPolicy />
  257. </snapshots>
  258. <!--远程仓库URL,按protocol://hostname/path形式 -->
  259. <url>http://snapshots.maven.codehaus.org/maven2</url>
  260. <!--用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。 -->
  261. <layout>default</layout>
  262. </repository>
  263. </repositories>
  264. pluginRepositories
  265. 作用:发现插件的远程仓库列表。
  266. repository类似,只是repository是管理jar包依赖的仓库,pluginRepositories则是管理插件的仓库。
  267. maven插件是一种特殊类型的构件。由于这个原因,插件仓库独立于其它仓库。pluginRepositories元素的结构和repositories元素的结构类似。每个pluginRepository元素指定一个Maven可以用来寻找新插件的远程地址。
  268.  
  269. <pluginRepositories>
  270. <!-- 包含需要连接到远程插件仓库的信息.参见profiles/profile/repositories/repository元素的说明 -->
  271. <pluginRepository>
  272. <releases>
  273. <enabled />
  274. <updatePolicy />
  275. <checksumPolicy />
  276. </releases>
  277. <snapshots>
  278. <enabled />
  279. <updatePolicy />
  280. <checksumPolicy />
  281. </snapshots>
  282. <id />
  283. <name />
  284. <url />
  285. <layout />
  286. </pluginRepository>
  287. </pluginRepositories>
  288. ActiveProfiles
  289. 作用:手动激活profiles的列表,按照profile被应用的顺序定义activeProfile
  290. 该元素包含了一组activeProfile元素,每个activeProfile都含有一个profile id。任何在activeProfile中定义的profile id,不论环境设置如何,其对应的 profile都会被激活。如果没有匹配的profile,则什么都不会发生。
  291. 例如,env-test是一个activeProfile,则在pom.xml(或者profile.xml)中对应idprofile会被激活。如果运行过程中找不到这样一个profileMaven则会像往常一样运行。
  292.  
  293. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  294. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  295. https://maven.apache.org/xsd/settings-1.0.0.xsd">
  296. ...
  297. <activeProfiles>
  298. <!-- 要激活的profile id -->
  299. <activeProfile>env-test</activeProfile>
  300. </activeProfiles>
  301. ...
  302. </settings>

Maven--setting详解的更多相关文章

  1. Maven使用详解

    Maven使用详解 世间万物相生相克,今年本来的目标是主要研究asp.net mvc以及windows平台相关的DI, ORM框架,突然有一天想研究一个Java EE里面相应的框架都是怎么玩的,于是研 ...

  2. eclipse里面构建maven项目详解(转载)

    本文来源于:http://my.oschina.net/u/1540325/blog/548530 eclipse里面构建maven项目详解 1       环境安装及分配 Maven是基于项目对象模 ...

  3. elasticSearch+spring 整合 maven依赖详解

    摘自:http://www.mayou18.com/detail/nTxPQSyu.html [Elasticsearch基础]elasticSearch+spring 整合 maven依赖详解 Ma ...

  4. maven package exec 及 maven 配置文件详解

    maven package test包下执行test 的配置文件 生成target目录,编译.测试代码,生成测试报告,生成jar/war文件 maven 配置文件详解 http://blog.csdn ...

  5. (十)Maven依赖详解

    1.何为依赖? 比如你是个男的,你要生孩子,呸呸呸...男的怎么生孩子,所以你得依赖你老婆,不过也不一定咯,你也可以依赖其她妹子. 我们在平时的项目开发中也是同理,你需要依赖一些东西才能实现相应的功能 ...

  6. maven配置详解

    什么是pom?     pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的 ...

  7. Maven使用详解,非常详细

    本文转:http://blog.csdn.net/u010425776/article/details/52027706 什么是Maven? 如今我们构建一个项目需要用到很多第三方的类库,如写一个使用 ...

  8. Maven 教程(10)— Maven依赖详解

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79545022 1.何为依赖? 比如你是个男的,你要生孩子,呸呸呸…男的怎么生孩子 ...

  9. maven搭建详解

    1, 下载   官方下载地址: maven_download, 最新版 apache-maven-3.0.5-bin.tar.gz   官方地址: maven   2, 解压   tar zxvf a ...

  10. IDEA之maven配置详解

    这两天被maven配置搞得焦头烂额,前后忙活了三天才彻底搞定. 下面我总结一下配置的步骤. 步骤 1. 首先去maven官网去下载maven,http://maven.apache.org/ 这里教大 ...

随机推荐

  1. Mybatis异常_02_Result Maps collection already contains value for

    一.异常 1.异常信息 2.异常原因 XXXMapper.xml文件中存在重名对象,保持名称不要一样即可正常启动. 我的原因是namespace与其他mapper 一样. 3.可能的原因 (1)nam ...

  2. hdu-5862 Counting Intersections(线段树+扫描线)

    题目链接: Counting Intersections Time Limit: 12000/6000 MS (Java/Others)     Memory Limit: 65536/65536 K ...

  3. super.onCreate(savedInstanceState) 以及onCreate(Bundle savedInstanceState, PersistableBundle persistentState)

    super.onCreate(savedInstanceState) 调用父类的onCreate构造函数. 当一个Activity在生命周期结束前,会调用onSaveInsanceState()这个回 ...

  4. 作业2nd

    1. 国内: 雷军作为中国互联网代表人物及环球年度电子商务创新首领人物,曾获中国经济年度人物及十大财智首领人物.中国互联网年度人物等多项国表里荣誉,并当选<福布斯>(亚洲版)2014年度贸 ...

  5. BZOJ4278 [ONTAK2015]Tasowanie[后缀数组+贪心]

    题目 求两数组归并后的数组最小字典序排列. 嘛,可能本人在贪心这块还是太弱了(或者说什么都弱),如果不知道是字符串题估计也想不起来用sa. 显然看得出归并时字典序小的那个数组先往里面加,这就是要比较两 ...

  6. python使用uuid生成唯一id或str

    介绍: UUID是128位的全局唯一标识符,通常由32字节的字符串表示. 使用: import uuid print uuid.uuid1() 14bfe806-f1c7-11e6-83b5-0680 ...

  7. WaitHandle.WaitAll 方法在WPF工程中的应用

    因为WaiAll需要多线程支持, 而WPF是STA模式, 可以通过以下方式实现WaitAll ManualResetEvent[] events:  foreach (ManualResetEvent ...

  8. makefile 使用【转载】

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重 ...

  9. hadoop--谷歌三大论文

    学习大数据必读的三个论文: http://pan.baidu.com/s/1c0FA69U 在我的网盘,大家可以去下载 Google File System中文版 Google Bigtable中文版 ...

  10. CF-811B

    B. Vladik and Complicated Book time limit per test 2 seconds memory limit per test 256 megabytes inp ...