`

maven多环境部署 Filtering 和 Profile的使用

 
阅读更多

 

 

 

 

0 前言:

 

在不同的软件开发生命周期阶段、不同的最终客户(用户)环境、不同的运行平台都有可能需要不同配置或资源的情况。假如各个环境下的差别很小的话,我们可以在项目编译之后手工修改或者写个 shell script 自动修改,但如果需要修改的项目很多而且复杂的话,则应该使用 Apache Maven 的 Profile 和 Filtering 功能来解决。(当然前提是你的项目必须是用 Maven 构建)
1 Filtering: Maven Resource Plugin的一个功能, 会使用系统属性或者项目属性的值替换资源文件(*.properties *.xml)当中${...}符号的值
比如 numReduceTasks=${numReduceTasks} 最后在编译执行后变成 : numReduceTasks=3
pom.xml的配置写法:
 	   <build>
	    <filters>
            <filter>src/main/filters/xuele-${build.profile.id}.properties</filter>  指定属性文件,作为下面目录src/main/resources里文件中filtering的来源
        </filters>
       <!--指定下面的目录为资源文件-->
        <resources>
            <!--设置自动替换-->
            <resource>
                <directory>src/main/resources</directory>    ----> 要替换的文件夹
                <includes>
                    <include>**/*</include>    -----> 替换的文件 
                </includes>
                <!--也可以用排除标签-->
                <!--<excludes></excludes>-->
                <!--开启过滤-->
                <filtering>true</filtering>     
            </resource>
        </resources>	
	.....  maven的一些信息
	</build>
 
Profile功能和在pom.xml中的写法:
	运行在pom.xml中定义多个profile段,然后在编译时选择其中一个用于覆盖项目文件原先的定义,如下:
	    <profiles>
        <!--默认激活开发配置,使用index-dev.properties来替换实际的文件key-->
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>   ---> 项目编译时可以使用-P指定需要使用的profile的id, eg: mvn clean compile -Pdev 其中-P后是id的名称,或者用这个true这个属性设置默认值 
            </activation>
            <properties>
                <build.profile.id>dev</build.profile.id>
            </properties>
        </profile>

        <!-- 测试环境配置 -->
        <profile>
            <id>test</id>
            <properties>
                <build.profile.id>test</build.profile.id>
            </properties>
        </profile>

        <!-- 生产环境配置 -->
        <profile>
            <id>product</id>
            <properties>
                <build.profile.id>product</build.profile.id>
            </properties>
        </profile>
    </profiles>
 
操作后的结果:
E:\workspace\bigdata_project\src\main\filters\bigdata-dev.properties      numReduceTasks=3   这是开发环境的配置文件,文件夹下是不同环境模板参数文件 里面还有 bigdata-pro.properties  bigdata-test.properties等文件
E:\workspace\bigdata_project\src\main\resources\mr_hbase.properties     numReduceTasks=${numReduceTasks}   这是模板文件 
E:\workspace\bigdata_project\target\classes\mr_hbase.properties         numReduceTasks=3               这是编译后的被模板文件替换后的目标文件  
 
 对应的 pom.xml中整体配置贴出如下:
<profiles>
        <!--默认激活开发配置,使用index-dev.properties来替换实际的文件key-->
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <build.profile.id>dev</build.profile.id>
            </properties>
        </profile>

        <!-- 测试环境配置 -->
        <profile>
            <id>test</id>
            <properties>
                <build.profile.id>test</build.profile.id>
            </properties>
        </profile>

        <!-- 生产环境配置 -->
        <profile>
            <id>product</id>
            <properties>
                <build.profile.id>product</build.profile.id>
            </properties>
        </profile>
    </profiles>

    <build>
        <filters>
            <filter>src/main/filters/bigdata-${build.profile.id}.properties</filter>    <!-- build.profile.id 在上面的 activeByDefault 使用dev值作为true默认值  -->
        </filters>

        <!--指定下面的目录为资源文件-->
        <resources>
            <!--设置自动替换-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
                <!--也可以用排除标签-->
                <!--<excludes></excludes>-->
                <!--开启过滤-->
                <filtering>true</filtering>
            </resource>
        </resources>
        <!--<resources>-->
            <!--<resource>-->
                <!--<directory>src/main/java</directory>-->
                <!--<excludes>-->
                    <!--<exclude>**/*.java</exclude>-->
                <!--</excludes>-->
            <!--</resource>-->
            <!--<resource>-->
                <!--<directory>src/main/resources</directory>-->
            <!--</resource>-->
        <!--</resources>-->
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <descriptors>
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 
 
 
分享到:
评论

相关推荐

    maven多环境部署pom文件实例

    本文将深入探讨如何使用Maven的POM(Project Object Model)文件实现多环境部署,使得代码能够在开发、测试和生产等不同环境中无缝切换。 首先,让我们理解什么是POM文件。POM是Maven的核心概念,它是一个XML文件,...

    使用maven Filtering实现多环境构建

    在软件开发过程中,多环境构建是一项重要的任务...总之,Maven Filtering与Profile的结合使用,为Java开发者提供了一种强大且灵活的多环境构建解决方案,使得项目能在不同环境中无缝地运行,提高了开发效率和产品质量。

    maven多环境配置打包

    这篇博客(虽然描述为空,但可以通过提供的链接进一步了解)可能介绍了如何使用Maven的 profiles 和 filtering 功能来实现多环境配置。通常,开发者会创建多个Maven配置文件(profiles),每个文件对应一个特定的...

    maven利用Profile构建不同环境的部署包

    总结来说,Maven的Profile功能是实现多环境构建的关键,通过它我们可以方便地管理不同环境的配置,构建出适应各种环境的Java应用部署包。同时,配合标准的目录结构(如WEB-INF和META-INF),我们可以更好地组织和...

    Maven下实现多种环境下的资源配置管理

    在Maven项目中,我们常常需要针对不同的部署环境(如开发、测试、生产等)使用不同的配置文件。本篇将详细讲解如何在Maven下实现多种环境下的资源配置管理,帮助开发者更高效地管理项目。 1. **Maven profiles**: ...

    springboot通过@Profile注解配置不同环境

    在本案例中,我们将深入探讨如何使用`@Profile`注解以及结合Maven来实现多环境配置。 首先,`@Profile`注解用于标记一个类或方法,表示该类或方法只在指定的环境中生效。例如,我们可以为开发环境创建一个`...

    maven笔记

    7. **多环境配置**:通过profiles配合filtering功能,实现不同环境下的资源配置差异化。 8. **部署策略**:Maven支持发布到私有或公共仓库,如`mvn deploy`。 ### 结论 Maven作为Java开发的强力工具,简化了项目...

    不同环境下的资源文件目录编译

    在IT行业中,资源文件目录编译是一个至关重要的环节,特别是在多环境部署的场景下。这篇博文的标题“不同环境下的资源文件...通过理解并熟练应用如Maven的profiles和filtering,我们可以轻松应对多环境部署带来的挑战。

    SpringBoot开发环境、测试环境、部署环境切换.pdf

    通过这种方式,SpringBoot项目可以根据不同的Maven配置文件轻松地在多个环境中切换,避免了手动修改配置文件可能导致的错误,提高了开发效率和环境一致性。同时,这也是一种标准化的软件工程实践,有助于保持代码的...

    springboot 多环境配置 yml文件版的实现方法

    SpringBoot 多环境配置是指在不同的环境中(如开发环境、测试环境、生产环境等),使用不同配置文件来管理应用程序的配置。这种配置方式可以使得应用程序的配置更加灵活和可靠。在本文中,我们将介绍使用 YML 文件...

    基于springboot+mybatisplus框架

    - 使用Git进行版本控制,Maven或Gradle作为构建工具,IntelliJ IDEA或Eclipse作为开发环境,这些工具可以提高开发效率和协作能力。 6. **最佳实践** - 遵循单一职责原则,确保每个类和方法只做一件事。 - 使用...

Global site tag (gtag.js) - Google Analytics