1、例子1
1.1、在项目中定义了 dev、test、production 三个不同环境 配置目录
注意:这是目录,不是单个配置文件。
每个目录下面有多个配置文件。如图所示:
此为 dev 目录下有多个配置文件,test、production的配置文件与此类似。
1.2、pom.xml :
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.eastone</groupId>
<artifactId>user-serverapi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>user-serverapi</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<package.environment>dev</package.environment>
<spring.version>4.1.6.RELEASE</spring.version>
</properties>
<!-- profile 定义了 dev、test、production 三个不同环境配置 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<package.environment>dev</package.environment>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<package.environment>test</package.environment>
</properties>
</profile>
<profile>
<id>production</id>
<properties>
<package.environment>production</package.environment>
</properties>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>serverapi</finalName>
<!-- org.eclipse.m2e 插件 -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native2ascii-maven-plugin</artifactId>
<versionRange>[1.0-beta-1,)</versionRange>
<goals>
<goal>native2ascii</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- maven-compiler-plugin 编译插件 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>utf8</encoding>
</configuration>
</plugin>
<!-- maven-dependency-plugin 依赖插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- maven-war-plugin 打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warName>serverapi</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
<!-- packagingExcludes 排除(删除)的目录和文件 -->
<packagingExcludes>**/environment/**,**/db/**,**/db-assembly.xml</packagingExcludes>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
<webResources>
<resource>
<directory>src/main/spring-conf</directory>
<targetPath>WEB-INF/classes</targetPath>
</resource>
<resource>
<!--${package.environment} 与 <package.environment>dev</package.environment>对应, 指定了使用哪个环境的配置文件 -->
<directory>src/main/resources/environment/${package.environment}</directory>
<targetPath>WEB-INF/classes</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
</project>
1.3、pom.xml 配置文件解读:
1、<profiles>
中 定义多个dev、test、production 三个不同环境
2、<package.environment>
中指定使用哪个环境配置,如 dev
3、${package.environment}
使用了 <package.environment>
中指定的值 dev 。
(感觉第1步定义的 <profiles>
其实没有实际用处 )
2、例子2
项目src/main/resources目录下建立相对应的目录。
dev,test,pro分别表示开发环境,测试环境,生产环境。针对不同的环境,配置内容会有不同。
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<!--本地开发环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<profiles.active>pro</profiles.active>
</properties>
</profile>
</profiles>
<!--build部分 -->
<build>
<finalName>xxx</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<!-- directory 指定引入的资源目录,excludes排除不必要的文件和目录 -->
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<excludes>
<exclude>dbpool/**</exclude>
<exclude>dev/*</exclude>
<exclude>mbg/*</exclude>
<exclude>pro/*</exclude>
<exclude>test/*</exclude>
<exclude>readme.txt</exclude>
</excludes>
</resource>
<resource>
<directory>${project.basedir}/src/main/resources/${profiles.active}</directory>
<!-- filtering 标签一定要有,他的作用就是把 src/main/resources 的文件替换为 dev|test|pro 下的文件 -->
<filtering>true</filtering>
</resource>
<resource>
<directory>${project.basedir}/src/main/java</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
3~26行:我们设置了三个 profile 分别对应目录中的三个开发环境。
8~10行:开发环境是默认激活的( activeByDefault 为 true
),这样如果在不指定profile时默认是开发环境。
34~44行:<directory>
指定引入的资源目录,<excludes>
排除不必要的文件和目录 。
45~48行:根据当前激活的 profile 来把指定的配置文件加载到 classpath 下。
桥黑板:<filtering>
标签一定要有,它的作用就是把 src/main/resources
的文件替换为 dev|test|pro
下的文件。(47行)