【前言】

最近在项目中用到了maven工具,相信很多第一次接触maven的人都有这样的困惑,maven的文件很简单,就像下图中的结构一样,但是它的功能十分强大,那是怎么做到的呢?配置文件!配置文件里是精华啊!今天小编带大家初步了解maven中的配置以及在项目中的具体实现。

【类型】

maven的配置文件主要有两大类,pom和settings。

pom文件,包括项目的依赖关系、开发遵循的原则等等,而相对来说,settings的配置主要是项目的具体的配置信息,比如仓库的路径、构建信息等。

1、全局的setting文件是对所有项目的配置,他的存在,保证了项目团队开发的一致性设定。

2、而对于项目内的特殊配置,需要使用用户级别的配置文件来实现。

在Windows系统中,通常存在于C盘的用户目录下.m2/settings下,如:C:\Users\YANG\.m2

因为C盘文件并不安全,通常我们会将用户配置拷贝到其他位置。

比如你可能会看到这样的文件结构:

简单来说maven的配置分为三类:项目配置、用户配置和全局配置。根据你的需求进行调整吧。

【配置】

1、pom.xml

pom全程 Project Object Model。当maven工作时,会去项目根目录下读取pom.xml获取所需的配置信息。

pom中的配置信息主要有项目信息,maven构建所需的信息等。

常用的部分配置有:

groupId 组

artifactId  一般采用模块名

Version    版本

下面的pom.xml中添加junit的依赖,就可以使用它进行测试了。

示例:

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tgb</groupId>
<artifactId>maven_test</artifactId>
<version>0.0.1-SANPSHOT</version> <!--添加依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>

dependencies

具有可继承性,用于添加依赖。当项目比较大时,子模块的pom需要制定父模块的pom。



      以itoo为例,itoo-exam-api为子模块,itoo-exam-parent为父模块。在子模块itoo-exam-api中pom文件配置信息为

<parent>
<groupId>com.tgb</groupId>
<artifactId>itoo-exam-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../itoo-exam-parent/pom.xml</relativePath>
</parent>

distributionManagement

该元素定义了开发库

       上面提到,在itoo中pom使用的继承关系设计的,所以该元素应该定义在最顶层中,即itoo-root的pom.xml中。在itoo中,我们采用maven+nexus

<!-- 项目部署信息(会被继承)===begin -->

	<distributionManagement> <!-- 远程部署管理信息 -->
<repository> <!--部署项目产生的构件到远程仓库需要的信息 -->
<id>releases</id>
<name>Nexus Release Repository</name>
<url>${nexus.url}/releases/</url>
</repository>
<snapshotRepository> <!-- 构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库 -->
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>${nexus.url}/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<!-- 项目部署信息===end -->

2、settings.xml

settings中的常用配置可以看下面的节点信息。

    <span style="font-family:Microsoft YaHei;"><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
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings></span>

localRepository

本地仓库的路径,默认为.m2/repository,存放主要jar包,当然也可以设置为其他路径。

     

      比如在itoo中,小编的本地路径位于E:/maven/repository,那么该节点下就应该配置这个路径。更新maven的时候,jar包就下载到这个路径下。



<?xml version="1.0" encoding="UTF-8"?>

<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 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>E:/maven/repository</localRepository>

servers

在pom中的distributionManagement定义了开发库,而用户名和密码就设置在servers元素下。当然除了username和password,还有privateKey等信息。

例如:

在itoo中,我们采用maven+nexus,因此,这里的用户名和密码就是私服的用户名和密码,不相信的话自己去试啊~~~

	<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>

mirrors

镜像库,指定库的镜像,用于增加其他库。

mirrorOf 该镜像指向的服务id,这里用*

	<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Local Repository</name>
<!--私服地址-->
<url>http://192.168.22.246:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>



profile

定义一系列配置信息,可以指定其激活条件,以达到不同环境使用不同配置信息的效果。

profile可以定义在pom、settings和全局setting文件中,作用范围不同而已。

      在小编项目中,profiles信息配置在settings.xml,是用户级别的配置。

具体配置如下,主要是覆写中央仓库的一些配置。

<profiles>
<profile>
<id>central</id>
<repositories>
<repository>
<id>central</id>
<name>Central</name> <url>http://*</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>local private nexus</name>
<!--私服地址-->
<url>http://192.168.22.246:8081/nexus/content/groups/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>



使用activeProfiles激活信息。

<!--激活上面配置的仓库信息-->
<activeProfiles>
<activeProfile>central</activeProfile>
</activeProfiles>

【小结】

像很多工具、框架一样,配置文件里定义了原理的东西,了解了这些配置,可以帮助我们理解相互间的关联关系。这样看来,是不是在项目中配置也不难理解啊?当然,这些原理在排错和解决问题的时候可以给你很大的帮助。

【工具学习】——教你读懂Maven的配置文件的更多相关文章

  1. 一步步教你读懂NET中IL(附带图)

    一步步教你读懂NET中IL(附带图) 接触NET也有1年左右的时间了,NET的内部实现对我产生了很大的吸引力,在msdn上找到一篇关于NET的IL代码的图解说明,写的挺不错的.个人觉得:能对这些底部的 ...

  2. Gradle学习系列之三——读懂Gradle语法

    在本系列的上篇文章中,我们讲到了创建Task的多种方法,在本篇文章中,我们将学习如何读懂Gradle. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...

  3. Gradle学习系列之读懂Gradle语法

    转载地址: http://www.cnblogs.com/CloudTeng/p/3418072.html Gradle是一种声明式的构建工具.在执行时,Gradle并不会一开始便顺序执行build. ...

  4. 一篇文章教你读懂Makefile

    makefile很重要      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professiona ...

  5. 【坚持】Selenium+Python学习之从读懂代码开始 DAY1

    学习Selenium+Python已经好几个月了,但越学发现不懂的东西越多. 感觉最大的问题还是在于基础不扎实,决定从头开始,每天坚持读代码,写代码. 相信量变一定能到质变!!! 2018/05/09 ...

  6. 【转】一步步教你读懂NET中IL(图文详解)

    本文章以一个实际的例子,让你了解堆叠式 VM 的运作原理,并对 .NET IL(Intermediate Language)有最基本的領略,需要的朋友可以参考下  .NET CLR 和 Java VM ...

  7. 教你读懂vue源码技术教程

    由于 Vue 的源码采用 ES6,所以你至少应该掌握 ES6 才能看得懂,其次你最好对 package.json 中的字段的作用有所了解.由于 Vue 使用 Rollup 构建,所以你不了解 Roll ...

  8. 一步一步教你读懂NET中IL

    .NET CLR 和 Java VM 都是堆叠式虚拟机器(Stack-Based VM),也就是说,它们的指令集(Instruction Set)都是采用堆叠运算的方式:执行时的资料都是先放在堆叠中, ...

  9. 三 vue学习三 从读懂一个Vue项目开始

    源码地址:     https://github.com/liufeiSAP/vue2-manage 我们的目录结构: 目录/文件 说明 build 项目构建(webpack)相关代码. config ...

随机推荐

  1. 青蛙的约会(exgcd/扩展欧几里得)

    题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清 ...

  2. 2018 Wannafly summer camp Day3--Shopping

    Shopping 描述 题目描述: 你要买n件物品,其中有一些是凳子. 商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品. 你有m辆购物车,请最小化你的花 ...

  3. 范围for语句的整理

    1.如何处理stirng中的每个字符?(来自C++Primer中文版5th中P83) 使用基于范围的for语句,比如下面的例子,输出每个字符 #include<iostream> #inc ...

  4. (第02节)集成Sping框架

    通过第一节创建好的Web项目,接下来就是集成Spring框架 首先让我们看下创建好的Web项目的基本结构 其中,Java跟test是我自己创的,然后就是一般的webapp文件,和pom配置文件,要在w ...

  5. Linux实战教学笔记

    Linux实战教学笔记01:计算机硬件组成与基本原理 Linux实战教学笔记02:计算机系统硬件核心知识 Linux实战教学笔记03:操作系统发展历程及系统版本选择 Linux实战教学笔记04:Lin ...

  6. 深度解析JQuery Dom元素操作技巧

    深度解析JQuery Dom元素操作技巧 DOM是一种与浏览器.平台.语言无关的接口,使用该接口可以轻松访问页面中所有的标准组件,这篇文章给大家介绍了JQuery dom元素操作方法,写的十分的全面细 ...

  7. phpstudy启动时Apache启动不了

    打开cmd,输入:D:\phpStudy\PHPTutorial\Apache\bin\httpd.exe -t 回车,即显示错误信息 说是我们的有一个文件目录不存在或者不可读取, 出现这个一般有两种 ...

  8. MIP缓存加速原理 MIP不仅仅只是CDN

    什么是MIP?我想我们现在都知道.可是你真的了解MIP吗?MIP加速原理是什么?MIP 是用 CDN 做加速的么?准确答案是:是,但不只是. 很多人并认为MIP百度排名会靠前,甚至权重会提高?作为一个 ...

  9. 21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】

    IE5 是第一款引入XHR 对象的浏览器.在IE5 中,XHR 对象是通过MSXML 库中的一个ActiveX对象实现的.因此,在IE 中可能会遇到三种不同版本的XHR 对象,即MSXML2.XMLH ...

  10. Hadoop参数调优

    转自:http://blog.sina.com.cn/s/blog_6a67b5c50100vop9.html dfs.block.size 决定HDFS文件block数量的多少(文件个数),它会间接 ...