- 在实际的开发项目中,基本有三种环境:
- 自己的开发环境--dev
- 内部的测试环境--test
- 业务环境--product
- 一般情况下都会准备出三套配置文件
- 而后在将项目打包为.war文件之后希望可以根据不同的环境选择不同的配置属性(.properties)文件
- Maven支持这样的动态选择的打包操作
1、建立一个保存所有配置文件的源目录: src/main/profiles
- dev:保存所有开发的相关环境资源配置
- test:保存所有测试的相关环境资源配置
- product:保存所有的线上环境的资源配置
2、建立一个保存所有框架开发配置文件的源目录:src/main/resources
- config/mybatis:保存所有mybatis的相关环境资源配置
- config/shiro:保存所有shiro的相关环境资源配置
- config/spring:保存所有spring的相关环境资源配置
3、添加相应的配置文件
src/
└── main
├── java
├── profiles
│ ├── dev
│ │ ├── conf
│ │ │ └── database.properties
│ │ ├── log4.properties
│ │ └── logback.xml
│ ├── product
│ │ ├── conf
│ │ │ └── database.properties
│ │ ├── log4.properties
│ │ └── logback.xml
│ └── test
│ ├── conf
│ │ └── database.properties
│ ├── log4.properties
│ └── logback.xml
├── resources
│ └── config
│ ├── mybatis
│ │ └── mybatis.cfg.xml
│ ├── shiro
│ │ └── spring-shiro.xml
│ └── spring
│ ├── sping-mvc.xml
│ └── spring-common.xml
└── webapp
└── WEB-INF
└── web.xml
4、修改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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.liang</groupId>
<artifactId>m2war</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>m2war Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.8</jdk.version>
<junit.version>4.12</junit.version>
<spring.version>5.1.1.RELEASE</spring.version>
<servlet.version>4.0.1</servlet.version>
<profiles.dir>src/main/profiles</profiles.dir>
<resources.dir>src/main/resources</resources.dir>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
</dependency>
</dependencies>
<profiles> <!-- 明确的描述出要使用的不同环境配置文件 -->
<profile>
<id>dev</id> <!-- 本配置文件的编号,一般会与文件目录重名 -->
<properties> <!-- 此配置项对应的路径 -->
<profile.dir>${profiles.dir}/dev</profile.dir>
</properties>
<activation> <!-- 如果没有指定profile,默认使用该配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profile.dir>${profiles.dir}/test</profile.dir>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<profile>
<id>product</id>
<properties>
<profile.dir>${profiles.dir}/product</profile.dir>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
<build>
<finalName>m2war</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encode>${project.build.sourceEncoding}</encode>
</configuration>
</plugin>
</plugins>
<defaultGoal>package</defaultGoal> <!-- 打包的时候使用 -->
<resources> <!-- 需要输出的配置文件 -->
<resource>
<directory>${resources.dir}</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>${profile.dir}</directory> <!-- 注意!profile.dir指的是profile的参数,并非properties参数 -->
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
5、配置完成后进行打包处理,生成默认的dev环境war包
6、如果使用test环境的war包,需要指定Profiles为test
7、在进行资源配置的时候可以配置必须包含的内容以及排除的内容
<resources>
<resource>
<directory>${resources.dir}</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
<resource>
<directory>${profile.dir}</directory>
<filtering>false</filtering>
</resource>
</resources>
打包处理后发现在classes/config目录下只保留了xml文件
classes/
├── conf
│ └── database.properties
├── config
│ ├── mybatis
│ │ └── mybatis.cfg.xml
│ ├── shiro
│ │ └── spring-shiro.xml
│ └── spring
│ ├── sping-mvc.xml
│ └── spring-common.xml
├── log4.properties
└── logback.xml