Maven配置简单介绍

之前也一直使用Maven进行项目构建,但仅限于简单使用,并没有进行系统的学习。本文仅为Maven的配置文件setting.xml的简单说明,以做备忘。

Setting.xml配置文件的标签说明

默认情况下maven的setting.xml文件会包含如下内容,其中“...”代表此标签下有子标签。

<?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>/path/to/local/repo</localRepository> <!-- 指定本地仓库路径 -->
    <interactiveMode>true</interactiveMode> <!-- 是否开启交互模式 -->
    <offline>false</offline> <!-- 是否离线模式运行 -->
    <pluginGroups>...</pluginGroups> <!-- 定义pluginGroup元素 -->
    <proxies>...</proxies> <!-- 定义proxy元素 -->
    <servers>...</servers> <!-- 定义server元素 -->
    <mirrors>...</mirrors> <!-- 定义mirror元素 -->
    <profiles>...</profiles> <!-- 定义profile元素 -->
    <activeProfiles>...</activeProfiles> <!-- 定义activeProfile元素 -->
</settings>

localRepository标签

此标签用于指定本地仓库的路径,本地仓库中会存放项目中所依赖的Lib库。默认本地的仓库路径为${user.home}/.m2/repository
Windows为C:\Users\{USERNAME}\.m2\repository
MAC为/Users/{USERNAME}/.m2/repository
Linux为/home/{USERNAME}/.m2/repository
一般可以将此配置修改为非系统且存储空间比较大的磁盘,避免占用系统盘空间,重装系统也会导致数据丢失。

interactiveMode标签

是否需要和用户交互以获得输入。如果Maven需要和用户交互以获得输入,则设置成true,反之则应为false,默认为true。
还没有具体使用和示例 @TODO

offline标签

是否离线,默认是false。在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息,对不能连接到远程仓库的情况比较实用。

pluginGroups标签

此标签下可以有多个pluginGroup,每个pluginGroup里需要指定一个groupId。pluginGroups默认自动包含org.apache.maven.pluginsorg.codehaus.mojo。此配置可以用于简化命令行输入,例如:

<pluginGroups>
    <pluginGroup>org.mortbay.jetty</pluginGroup>
</pluginGroups>

我们可以直接输入mvn jetty:run代替mvn org.mortbay.jetty:jetty-maven-plugin:run

proxies标签

此标签下可以定义多个proxy子元素,用于指定Maven在进行联网时需要使用的代理。当设置了多个代理的时候active为true的代理将会被使用,多个proxy的active都设置为true时,第一个会被使用。示例:

<proxy>
      <id>myproxy</id> <!-- 代理的标示 -->
      <active>true</active> <!-- 是否激活 -->
      <protocol>http</protocol> <!-- 代理的协议 -->
      <host>proxy.somewhere.com</host> <!-- 地址的主机地址 -->
      <port>8080</port> <!-- 代理的端口号 --> 
      <username>proxyuser</username> <!-- 代理的账号 -->
      <password>somepassword</password> <!-- 代理的密码 -->
      <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts> <!-- 不实用代理的地址,多个可用`|`隔开 -->
</proxy>

servers标签

此标签下可以定义多个server子元素,用于存放连接到某个需要验证的远程服务器时的验证信息。有username/password和privateKey/passphrase两种方式。示例:

<server>
      <id>server001</id> <!-- 与repository/mirror匹配的ID -->
      <username>my_login</username> <!-- 验证的用户名 -->
      <password>my_password</password> <!-- 验证的用户密码 -->
      <privateKey>${user.home}/.ssh/id_dsa</privateKey> <!-- 验证的私钥 -->
      <passphrase>some_passphrase</passphrase> <!-- 验证的私钥密码 -->
      <filePermissions>664</filePermissions> <!-- 当部署时创建的文件的权限 -->
      <directoryPermissions>775</directoryPermissions> <!-- 当部署时创建的文件夹的权限 -->
      <configuration></configuration> <!--  -->
</server>
  • id,和repository/mirror中指定的id相匹配,即指定某个repository/mirror使用此验证方式;
  • username和username 验证用的账号和密码,密码可进行加密,详见:Password Encryption
  • privateKey和privateKey,功能和前两个类似,privateKey中指定私钥的位置,默认${user.home}/.ssh/id_dsa使用此方式时,必须保证删掉password
  • filePermissions和directoryPermissions,当部署系统时创建的文件和文件夹的权限

mirrors标签

指定多个远程仓库的镜像,mirror用以缓解远程仓库的压力,把对远程仓库的请求转换到对其镜像地址,比如国内的aliyun,oschina,自己用nexus搭建的仓库等。

<mirror>
      <id>planetmirror.com</id>  <!-- mirror的id -->
      <name>PlanetMirror Australia</name><!-- mirror的名字 -->
      <url>http://downloads.planetmirror.com/pub/maven2</url><!-- mirror的地址 -->
      <mirrorOf>central</mirrorOf><!-- 关联的仓库 -->
</mirror>
  • id,mirror的唯一ID
  • name,用于友好的mirror名称,方便识别mirror
  • url,mirror的地址,maven会使用这个地址代替原有仓库地址访问资源
  • mirrorOf,所关联仓库的ID。同时关联多个时,用逗号隔开;*表示关联所有的仓库;排除某一个仓库时,可以使用*,!repositoryId
* = everything
external:* = everything not on the localhost and not file based.
repo,repo1 = repo or repo1
*,!repo1 = everything except repo1

profiles标签

指定多个profile。profile元素由activation、repositories、pluginRepositories和properties四个元素组成。当一个profile在settings.xml中是处于活动状态并且在pom.xml中定义了一个相同id的profile时,settings.xml中的profile会覆盖pom.xml中的profile。

<profile>
      <id>test</id>
      <activation> <!-- profile激活条件 -->
        <activeByDefault>false</activeByDefault>
        <jdk>1.5</jdk> <!-- 当JDK版本满足时激活 -->
        <os> <!-- 当系统满足如下条件时激活 -->
          <name>Windows XP</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
        <property> <!-- 当name的value为XXX时激活 -->
          <name>mavenVersion</name>
          <value>2.0.3</value>
        </property>
        <file> <!-- 当文件存在,不存在时激活  -->
          <exists>${basedir}/file2.properties</exists>
          <missing>${basedir}/file1.properties</missing>
        </file>
      </activation>
      <properties> <!-- 定义属性键值对  -->
        <user.install>${user.home}/our-project</user.install>
      </properties>
      <repositories> <!-- 指定远程仓库  -->
        <repository>
            <id>codehausSnapshots</id>
            <name>Codehaus Snapshots</name>
            <releases>
                <enabled>false</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>warn</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
            <url>http://snapshots.maven.codehaus.org/maven2</url>
            <layout>default</layout>
        </repository>
      </repositories>
      <pluginRepositories>
        ...
      </pluginRepositories>
</profile>
  • activation标签
    用于指定profile的激活条件,activeByDefault指定当没有profile处于激活状态时是否激活此profile。如果需要满足多个JDK版本可参考maven-enforcer-plugin
  • properties标签
    定义属性键值对的,当此profile是激活状态的时候,properties下面的属性都可以在pom.xml中使用。
  • repositories标签
    定义多个repository标签,指定远程仓库。当该profile是激活状态的时候,这里的远程仓库将作为当前pom的远程仓库。
    releases、snapshots:限制类型
    enabled:表示这个仓库是否允许这种类型
    updatePolicy:更新策略,表示多久尝试更新一次。可选值有always、daily、interval:X(X的单位为分)和never,默认daily。
    checksumPolicy:Maven在部署项目到仓库的时候会连同校验文件一起提交,checksumPolicy指定当这个校验文件缺失或不正确的时候该如何处理,可选项有ignore、fail和warn。
  • pluginRepositories标签
    和repositories类似,pluginRepositories是用来指定插件仓库的。

activeProfiles标签

<activeProfiles>
    <activeProfile>env-test</activeProfile>
</activeProfiles>

包含多个activeProfile元素,指定处于活跃状态的profile。

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

推荐阅读更多精彩内容