`
bit1129
  • 浏览: 1070002 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Maven学习笔记十]Maven Profile与资源文件过滤器

阅读更多

什么是Maven Profile

Maven Profile的含义是针对编译打包环境和编译打包目的配置定制,可以在不同的环境上选择相应的配置,例如DB信息,可以根据是为开发环境编译打包,还是为生产环境编译打包,动态的选择正确的DB配置信息

 

Profile的激活机制

1.Profile可以手工激活,比如在Intellij Idea的Maven Project视图中可以选择一个Profile作为当前Active的Profile,在编译处理资源文件时,即使用这个Profile

2.条件自动激活

    2.1 根据操作系统自动激活,如下配置后那么当在Windows家族的操纵系统上编译时,自动以这个profile作为当前Active的profile

   

        <profile>
            <id>Dev</id>
            <!--自动激活-->
            <activation>
                <os>
                    <family>Windows</family>
                </os>
            </activation>
       </profile>

   2.2 根据jdk激活

   2.3 根据文件是否存在激活

   2.4 根据System Properties属性和属性值激活

            <activation>
                <property>
                    <name>file.encoding</name>
                    <value>UTF-8</value>
                </property>
            </activation>

   这表示当System.getProperty("file.encoding")为UTF-8,则激活这个Profile

    2.5 条件组合激活

  

            <!--自动激活-->
            <activation>
                <os>
                    <family>Windows</family>
                </os>
                <property>
                    <name>file.encoding</name>
                    <value>UTF-8</value>
                </property>
            </activation>

 

基于Profile的资源文件过滤

当使用Profile进行编译环境定制时,主要的目的是将项目的配置依据编译的目标和目的进行自动的设值。例如,我们在开发环境下编译时,希望用到的数据库是测试数据库;当我们要编译打包到生产环境时,需要把项目中对于DB的配置信息设置为生产环境下的DB配置。

Profile和编译过程中的资源属性值替换,可以完成这个目的。

 

1. 定义两个Profile

个用于配置开发环境的DB信息,另外一个用于配置生产环境的DB信息。通常Profile的定义放在pom.xml文件的最后

 

 

 <profiles>
        <profile>
            <id>Dev</id>
            <properties>
                <db.username>test</db.username>
                <db.passwd>test</db.passwd>
                <db.url>jdbc:mysql://test:6080/user</db.url>
            </properties>
        </profile>
        <profile>
            <id>Prod</id>
            <properties>
                <db.username>prod</db.username>
                <db.passwd>prod</db.passwd>
                <db.url>jdbc:mysql://prod.com:6080/user</db.url>
            </properties>
        </profile>
    </profiles>

 可见两个Profile的Properties中定义的属性完全一样,只是属性值会根据Profile在编译过程中动态进行设置

2. 创建jdbc.properties

在src/main/resources目录下创建jdbc.properties文件,内容如下

db.username=${db.username}
db.passwd=${db.passwd}
db.url=${db.url}

 

3. 配置资源文件的编译时动态根据选定的Profile替换

 

在pom.xml的build元素中,配置resources元素(实际上,即使不配置这个目录,Maven编译时,也会自动的对/src/resources目录的配置文件进行自动的使用Maven pom.xml定义的属性进行替换)

  <build>  
       <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

 

4.编译

因为Profile没有指定自动激活,所以在编译时首先选择一个Profile,这里选择Prod,编译得到的jdbc.properties内容是

db.username=prod
db.passwd=prod
db.url=jdbc:mysql://prod.com:6080/user

 
资源文件属性值的替换是在编译源代码之前完成,

 

 5. 更新一步

上面是通过pom.xml文件中的属性对properties文件中的占位属性进行替换,这样当配置属性非常多时,这些属性将占据pom.xml文件大幅空间。Maven可以指定过滤文件的方式对具有占位属性的文件进行替换。

 

在具有占位属性的文件所在的Maven项目下pom.xml添加如下内容:

 

 <build>
        <filters>
            <filter>${project.basedir}/../src/main/filters/filter-${deploy.env.name}.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

 

上面的deploy.en.name是在父pom.xml定义的。

 

    <profiles>
        <profile>
            <id>Dev</id>
            <properties>
                <deploy.env.name>dev</deploy.env.name>
            </properties>
        </profile>
        <profile>
            <id>Test</id>
            <properties>
                <deploy.env.name>test</deploy.env.name>
            </properties>
        </profile>
        <profile>
            <id>Prod</id>
            <properties>
                <deploy.env.name>production</deploy.env.name>
            </properties>
        </profile>
    </profiles>

 

而filter-dev.properties,filter-test.properties,filter-production.properties则定义在跟父pom.xml平级的src目录(如下的路径表示)

 

${project.basedir}/../src/

 

 

 

 

 

 

分享到:
评论
1 楼 kittyfxm 2014-08-04  

相关推荐

    maven学习笔记maven学习笔记

    maven学习笔记maven学习笔记maven学习笔记

    尚硅谷Maven课程笔记代码资源

    【尚硅谷Maven课程笔记代码资源】是一份全面学习Maven的资料集合,它涵盖了从基础到高级的各种知识点,旨在帮助开发者深入理解并熟练运用Maven进行自动化构建。该资源包含课件、源码和相关的笔记,使得学习过程更加...

    Maven学习笔记.zip

    **Maven学习笔记** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程。Maven通过使用一个项目对象模型(Project Object Model,POM),XML格式的配置文件,定义了...

    maven学习笔记01(基础入门)

    ** Maven基础入门 ** Maven是一个Java项目管理工具,它主要负责构建、依赖管理和项目信息管理。...在`maven_study_01`的学习笔记中,你可以找到更多关于Maven的基础知识和实践案例,帮助你快速上手并掌握这一工具。

    Maven 教程:基础篇-尚硅谷学习笔记 2022年

    **Maven教程:基础篇——尚硅谷学习笔记 2022年** Maven是一个强大的Java项目管理和构建工具,由Apache软件基金会开发。它通过提供一个标准的项目对象模型(Project Object Model,POM)来简化项目的构建过程,并...

    maven学习笔记整理

    maven学习笔记整理

    maven学习笔记.rar

    ** Maven学习笔记详解 ** Maven,作为Java项目管理和构建工具,是开发人员不可或缺的利器。它通过使用一种标准化的项目对象模型(Project Object Model,POM)来管理项目的依赖关系,构建过程以及配置信息。Maven...

    mybatis_maven学习笔记

    【mybatis_maven学习笔记】 在Java开发领域,MyBatis和Maven是两个不可或缺的工具,它们分别在数据访问层和项目构建方面扮演着重要角色。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,...

    培训机构传出的maven学习笔记

    8. **Maven profiles**:学习如何使用profile来根据不同环境配置不同的构建参数,如开发、测试和生产环境的配置。 9. **持续集成与Maven**:Maven与持续集成工具(如Jenkins、GitLab CI/CD等)的集成,实现自动化...

    maven学习笔记1

    这部分笔记可能包含了Maven的相关学习资源和参考资料,但具体内容未给出。通常,学习Maven时,你需要了解如何编写pom.xml文件、理解生命周期和构建阶段、以及如何配置Maven插件。 **三、安装Maven** 1. 在Linux...

    maven学习资源整理

    ** Maven学习资源整理** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程。本资源包是为初学者和有经验的开发者准备的一系列Maven学习资料,旨在帮助你更好地理解和...

    个人Maven学习笔记

    ### 个人Maven学习笔记 #### 为什么使用Maven? 在软件开发过程中,尤其是在使用Java进行后端开发时,项目通常会依赖大量的第三方库或框架。如果没有统一的管理工具,这些依赖很容易出现版本冲突的问题,增加了...

    黑马maven笔记,第一天

    ### 黑马Maven笔记详解 #### Maven简介与特点 Maven是一款强大的项目管理和构建工具,作为Apache基金会下的一个开源项目,它完全采用Java语言编写,主要用于管理Java项目。Maven通过标准化项目构建过程和依赖管理...

    maven项目学习笔记记录

    **Maven项目学习笔记记录** 在软件开发领域,Maven是一个强大的项目管理和构建工具,尤其在Java开发中广泛使用。本笔记将深入探讨Maven的核心概念、主要功能以及实际应用场景,帮助你更好地理解和掌握这一重要工具...

    Maven学习笔记

    Maven使用一个名为POM(Project Object Model)的XML文件来管理项目的构建过程。其核心功能包括依赖管理、仓库管理、构建生命周期和插件架构等。 依赖管理是Maven的核心特性之一。它通过在POM文件中声明项目依赖,...

    maven学习笔记,快速入门maven

    内容概要:maven学习笔记,适合刚接触maven的人能让你快速入门。 适用人群:大学生或者初基础maven的人 使用场景及目标:idea集成maven,用来下载依赖包

    maven profile多环境配置

    在 Maven 中,我们可以使用资源文件来存储环境相关的配置信息。这些资源文件可以存储在 `src/main/resources` 目录下。为了区分不同的环境,我们可以在 `src/main/resources` 目录下创建不同的子目录,例如 `dev`、`...

Global site tag (gtag.js) - Google Analytics