setting.xml/pom.xml

settings.xml

settings.xml是maven的全局配置文件
settings.xml文件一般存在于两个位置:
1.全局配置: {M2_HOME}/conf/settings.xml 2.用户配置:{user.home}/.m2/settings.xml
用户配置优先级高于全局配置

顶级标签

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/> 
  <!--构建系统本地仓库的路径,默认值是~/.m2/repository -->
  <interactiveMode/>
  <!--表示maven是否需要和用户交互以获得输入(默认为true),如果需要则设置为true == <interactiveMode>true</interactiveMode> -->
  <usePluginRegistry/>
  <!--表示maven是否需要使用plugin-registry.xml文件来管理插件版本(默认为false),如果需要让maven使用文件~/.m2/plugin-registry.xml来管理插件版本,则设为true -->
  <offline/>
  <!--表示maven是否需要在离线模式下运行,默认为false-->
  <pluginGroups/>
  <!--当插件的组织id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表-->
  <servers/>
  <!--一般,仓库的下载和部署是在pom.xml文件中的repositories和distributionManagement元素中定义的。然而,一般类似用户名、密码(有些仓库访问是需要安全认证的)等信息不应该在pom.xml文件中配置,这些信息可以配置在settings.xml中-->
  <mirrors/>
  <!--为仓库列表配置的下载镜像列表-->
  <proxies/>
  <!--用来配置不同的代理-->
  <profiles/>
  <!--根据环境参数来调整构建配置的列表,它包含了id、activation、repositories、pluginRepositories和 properties元素,如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile-->
  <activeProfiles/>
  <!--该元素包含了一组activeProfile元素,每个activeProfile都含有一个profile id。任何在activeProfile中定义的profile id,不论环境设置如何,其对应的 profile都会被激活。如果没有匹配的profile,则什么都不会发生-->
</settings>

二级标签

profile标签

pom

pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。

pom.xml

一级标签

</groupId>
<!--项目或者组织的唯一标志-->
</artifactId>
<!--项目的通用名称-->
</version>
<!--项目的版本-->
</packaging>
<!--打包机制,例如pom jar等-->
<!--groupId,artifactId,version,packaging作为项目唯一坐标-->
</classifier>
<!--分类-->
</url>
<!--开发团队官方地址,非必要-->
</dependencies >
<!--所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承-->
</dependencyManagement>
<!--在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,从而控制所有子项目的依赖项的版本统一,所以让子项目中引用一个依赖可以不用显示的列出版本号,maven会根据父子关系向上寻找一个dependencyManagement中存在这个依赖项并获取版本信息-->

dependencies与dependencyManagement 的区别:
dependencyManagement仅仅是声明依赖并不会真正地注入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom,但是如果子项目中已经指定了version则不会向上寻找而直接使用该版本的jar。

二级标签

dependency

<dependency>  
       <groupId>junit</groupId>  
       <artifactId>junit</artifactId>  
       <version>4.11</version>  
       <scope>test</scope>  
       <type >jar</ type >  
       <optional >true</ optional >  
       </exclusions>
</dependency>

groupId,artifactId,version,packaging定义了一个具体的依赖项
optional:设置指依赖是否可选,默认为false,即子项目默认都继承,为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似
exclusions:如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion
scope:用来指定当前包的依赖范围

  • compile(编译范围),是默认的范围,编译范围依赖在所有的classpath中可用,同时它们也会被打包。
  • provided(已提供范围),只有在当JDK或者一个容器已提供该依赖之后才使用。
  • runtime(运行时范围),在运行和测试系统的时候需要。
  • test(测试范围),在一般的 编译和运行时都不需要。
  • system(系统范围),与provided类似
    在dependencyManagement中的dependency可以使用scope=import来解决pom单继承问题,即可以将杂乱冗长的parent 分成多个model

pom关系

  • 依赖关系:就是一个dependency
  • 继承关系:子pom与父pom的关系,父pom用来进行统一的版本关系,注意此时packaging必须为pom
  • 聚合关系:
    总pom
<modules>  
    <!-- 这里配置的不是artifactId,而是这个模块的目录名称-->  
    <module>module-1</module>  
    <module>module-2</module>  
    <module>module-3</module>  
</modules>

子pom

<!-- 声明总项目的坐标 -->  
<parent>
    <groupId>org.clf.parent</groupId>   
    <artifactId>my-parent</artifactId>   
    <version>2.0</version>   
</parent> 

继承与聚合都属于父子关系, 不同的是对于聚合模块来说,它知道有哪些被聚合的模块,但那些被聚合的模块不知道这个聚合模块的存在。对于继承关系的父 POM来说,它不知道有哪些子模块继承与它,但那些子模块都必须知道自己的父 POM是什么,在实际项目中,一个 POM往往既是聚合POM,又是父 POM,它继承了某个项目,本身包含几个子模块,同时肯定会存在普通的依赖关系,就是说,依赖、继承、聚合这三种关系是并存的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343