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,它继承了某个项目,本身包含几个子模块,同时肯定会存在普通的依赖关系,就是说,依赖、继承、聚合这三种关系是并存的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。