maven多profile一探究竟

maven属性

maven自带的一些常用属性:

  • ${project.build.sourceDirectory} 项目主代码根目;src/main/java/
  • ${project.build.testSourceDirectory}项目测试代码根目录,src/test/java/
  • ${project.outputDirectory}项目主代码编译输出目录,默认是target/classes
  • ${project.build.directory}项目构建输出根目录,默认为target/
  • ${project.groupId}项目groupId
  • ${project.artifactId} 项目artifactId
  • ${project.version} 项目的version
  • {project.build.finalName}项目打包输出的文件名称,默认为{project.artifactId}-${project.version}
  • ...

自定义属性:用户可以在pom文件的properties元素下自定义自己的属性,也可以在profile中自定义属于profile的属性。

在Pom中:

<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/maven-v4_0_0.xsd">
   // 此处省略其他东西

    <properties>
        <my.pro>hello</my.pro>
    </properties>
</project>

除此之外,java系统属性和环境变量属性都可以作为maven的属性。比如:

  • ${user.home} 就是指向了用户目录,可以通过mvn help:system查看java系统支持的属性。
  • ${env.JAVA_HOME}指代的就是系统环境变量中的JAVA_HOME 配置的值。

多profile配置

有时候,我们需要针对不同环境配置打包项目,比如生产环境和开发环境使用不一样的数据库配置,直接修改配置文件然后构建是手动行为,效率低下且容易出错。maven提供一种自动根据不同配置构建项目的方法--使用profile。

每个profile就是一个配置,使用maven构建的时候,指定激活某个profile就可以使用某套配置。

在properties配置文件中我们可以使用这种配置。

database.jdbc.driverClass=${db.driver}
database.jdbc.url=${db.url}
...

然后在maven的配置文件中指定profile

<profiles>
        <profile>
            <id>test</id>
            <properties>
                <db.driver>com.mysql.jdbc.Driver</db.driver>
                <db.username>root</db.username>
                <db.password>abc</db.password>
                <db.url>jdbc:mysql://localhost:3306/test?useSSL=true</db.url>
            </properties>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <db.driver>com.mysql.jdbc.Driver</db.driver>
                <db.username>root</db.username>
                <db.password>abc</db.password>
                <db.url>jdbc:mysql://localhost:3306/dev?useSSL=true</db.url>
            </properties>
        </profile>
</profiles>

说明:

  • id 指明profile的id标识
  • properties 中定义一些该profile的属性。

这样还没算完成,默认情况下,只有pom文件中的maven属性会被替换,在资源文件.properties文件中的${db.url}不会在构建的时候被替换,我们要让maven解析资源文件替换掉那些属性,就需要使用到maven的插件:maven-resource-plugin

这个插件默认只是将资源目录下的文件拷贝到编译输出目录,但可以通过简单的配置改变他的行为,来开启资源文件过滤,并且可以指定过滤规则。

在父pom中开启资源文件filter示例:

<build>
    <finalName>profile-test</finalName>
    <!--开启主目录下资源文件过滤-->
    <resources>
      <resource>
        <filtering>true</filtering>
        <directory>${project.basedir}/src/main/resources</directory>
        <includes>
          <include>*.properties</include>
        </includes>
      </resource>
    </resources>
    <!--开启测试目录下资源文件过滤-->
    <testResources>
      <testResource>
        <filtering>true</filtering>
        <directory>${project.basedir}/src/test/resources</directory>
        <!--包括哪些-->
        <includes>
          <include>*.properties</include>
        </includes>
        <!--排除哪些-->
        <!--<excludes>-->
          <!--<exclude>*.xml</exclude>-->
        <!--</excludes>-->
      </testResource>
    </testResources>
  </build>

配置好之后,编译打包时,maven插件会将资源文件中引用到maven属性的地方的字符串替换成maven属性的值,生成打包后的文件。

目前准备工作已经做完了,直接使用如下命令就可以激活profile来构建项目。

mvn clean package -Dmaven.test.skip=true -Pdev

参数说明:

-Dmaven.test.skip=true 指定构建的时候跳过测试代码的编译和测试。

-P指定激活的profile
,这里的dev就是pom文件中对应的profile的id,可以指定多个profile,profile之间用逗号隔开。

那么,如果我们想在开发的时候使用默认的一个profile,省去构建的时候指定-P参数的传入,可以在默认的profile配置中指定activation的activeByDefault为true,如下:


<profile>
        <id>dev</id>
        <properties>
            <db.driver>com.mysql.jdbc.Driver</db.driver>
            <db.username>root</db.username>
            <db.password>vinfung77</db.password>
            <db.url>jdbc:mysql:///dev?useSSL=true</db.url>
        </properties>
        <!--默认激活-->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
</profile>

profile 的种类

  • pom.xml文件中指定的profile
  • 用户settings.xml文件,.m2/settings.xml中指定的profile
  • 全局settings.xml文件,conf/settings.xml中指定的profile

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">
    
  //此处省略其他无关的
  
  
  <profiles>
    //在这里配置profile
  </profiles>

  <!-- 指定默认激活哪些profile
  <activeProfiles>
    <activeProfile>alwaysActiveProfile</activeProfile>
    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
  </activeProfiles>
  -->
</settings>

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,628评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,773评论 6 342
  • 简介 概述 Maven 是一个项目管理和整合工具 Maven 为开发者提供了一套完整的构建生命周期框架 Maven...
    闽越布衣阅读 4,277评论 6 39
  • 前言什么是 POMQuick Overview POM 常用元素 pom.xml 完整注释 参考 0 前言 什么是...
    seyvoue阅读 12,581评论 1 36
  • 怀着有些激动兴奋地心来写下面这段文字,仅以此篇送给我的哥哥。 2月20号记录了《有爱的家庭会议》,在记录过程中有喜...
    琴素亲子阅读 599评论 2 2