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(Project Object Model)文件实现多环境部署,使得代码能够在开发、测试和生产等不同环境中无缝切换。 首先,让我们理解什么是POM文件。POM是Maven的核心概念,它是一个XML文件,...
在软件开发过程中,多环境构建是一项重要的任务...总之,Maven Filtering与Profile的结合使用,为Java开发者提供了一种强大且灵活的多环境构建解决方案,使得项目能在不同环境中无缝地运行,提高了开发效率和产品质量。
这篇博客(虽然描述为空,但可以通过提供的链接进一步了解)可能介绍了如何使用Maven的 profiles 和 filtering 功能来实现多环境配置。通常,开发者会创建多个Maven配置文件(profiles),每个文件对应一个特定的...
总结来说,Maven的Profile功能是实现多环境构建的关键,通过它我们可以方便地管理不同环境的配置,构建出适应各种环境的Java应用部署包。同时,配合标准的目录结构(如WEB-INF和META-INF),我们可以更好地组织和...
在Maven项目中,我们常常需要针对不同的部署环境(如开发、测试、生产等)使用不同的配置文件。本篇将详细讲解如何在Maven下实现多种环境下的资源配置管理,帮助开发者更高效地管理项目。 1. **Maven profiles**: ...
在本案例中,我们将深入探讨如何使用`@Profile`注解以及结合Maven来实现多环境配置。 首先,`@Profile`注解用于标记一个类或方法,表示该类或方法只在指定的环境中生效。例如,我们可以为开发环境创建一个`...
7. **多环境配置**:通过profiles配合filtering功能,实现不同环境下的资源配置差异化。 8. **部署策略**:Maven支持发布到私有或公共仓库,如`mvn deploy`。 ### 结论 Maven作为Java开发的强力工具,简化了项目...
在IT行业中,资源文件目录编译是一个至关重要的环节,特别是在多环境部署的场景下。这篇博文的标题“不同环境下的资源文件...通过理解并熟练应用如Maven的profiles和filtering,我们可以轻松应对多环境部署带来的挑战。
通过这种方式,SpringBoot项目可以根据不同的Maven配置文件轻松地在多个环境中切换,避免了手动修改配置文件可能导致的错误,提高了开发效率和环境一致性。同时,这也是一种标准化的软件工程实践,有助于保持代码的...
SpringBoot 多环境配置是指在不同的环境中(如开发环境、测试环境、生产环境等),使用不同配置文件来管理应用程序的配置。这种配置方式可以使得应用程序的配置更加灵活和可靠。在本文中,我们将介绍使用 YML 文件...
- 使用Git进行版本控制,Maven或Gradle作为构建工具,IntelliJ IDEA或Eclipse作为开发环境,这些工具可以提高开发效率和协作能力。 6. **最佳实践** - 遵循单一职责原则,确保每个类和方法只做一件事。 - 使用...