在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据库配置文件、属性文件等等。
使用maven来实现多环境的构建可移植性,需要借助maven提供的profile功能,通过不同的环境激活不同的profile来达到构建的可移植性。
思路:对于我当前的系统来说,是借助 maven-resources-plugin 此插件 将源代码和资源文件复制到一个current目录中去的,那么对于不同环境中需要的数据库配置文件 属性文件 等properties文件来说 , 我们可以在共公有模块中 , 在src\main目录下建立env\dev ,env\pro ,den\test 等三个环境下的配置文件目录,里面存放各自环境下的配置文件 然后在parent模块中 通过配置profiles来指定构建时复制上述三个目录下的哪个目录到current中去。
1. 首先在parent模块的pom文件中配置profiles
上面是通过profile指定了属性env的值 通过
<activeByDefault 默认dev环境
2.使用maven-resource-plugin将指定目录复制到current目录中去
<plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.1</version> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${app.dir}</outputDirectory> <resources> <resource> <directory>./webapp/</directory> <filtering>false</filtering> </resource> </resources> </configuration> </execution> <!-- 把指定目录放到target/classes里 --> <execution> <id>copy-conf</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>./target/classes</outputDirectory> <resources> <resource> <directory>./src/main/resources</directory> <filtering>false</filtering> </resource> <resource> <directory>./src/main/env/${env}</directory> <filtering>false</filtering> </resource> </resources> </configuration> </execution> <!-- 把每个工程的目录复制到 target/classes下 --> <execution> <id>copy-classes-conf</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${app.dir}/WEB-INF/classes</outputDirectory> <resources> <resource> <directory>./target/classes</directory> <filtering>false</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin>
这样构建时通过 pfofile指定了属性env的值 在maven-resource-plugin插件工作时,读取env的值 ,这样就可以复制不同环境下的文件到current中了。
3.这样配置完之后 如果你使用的是idea进行开发的话 进入命令行模式 进入聚合模块 之后执行 mvn install -Dmaven.test.skip=true -Pdev 就可以了
-P 后面的就是你定义的profile的id