一、前言
在Maven项目开发中,一般都会有四种环境情形:
1. 本地环境(Local)
2. 开发环境(Dev)
3. 测试环境(Beta)
4. 发布环境(Prod)
在不同环境中,总会遇到FTP服务器配置不一样,数据库配置不一样等一系列问题,这样Maven的环境隔离将有助于我们轻松切换不同配置环境。
maven环境隔离可以解决:
- 避免人工修改的弊端,即容易犯错
- 避免分环境打包、编译、部署
三、maven环境隔离的配置及原理
pom.xml中builder节点上增加如下配置
<resources>
<resource>
<directory>src/main/resources.${deploy.type}</directory>
<excludes>
<exclude>*.jsp</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
其中${deploy.type}对应下述配置节点中的deploy.type属性值。
接着在pom.xml中增加profiles节点
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<deploy.type>dev</deploy.type>
</properties>
</profile>
<profile>
<id>beta</id>
<properties>
<deploy.type>beta</deploy.type>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<deploy.type>prod</deploy.type>
</properties>
</profile>
</profiles>
这里配置了activeByDefault结点为true,表示当不选择编译环境时,默认使用dev(开发)环境,这也是推荐的配置。上述提到的deploy.type将会直接从这里的deploy.type中拿值,来表示是哪个编译环境。这两个结点缺一不可!
四、Maven环境隔离目录初始化
新建要隔离的文件夹,并把要隔离的文件分开,公共的留下,如下:
之前我们在pom中配置了环境隔离的目录,resources下,那么就下来就是将需要进行隔离的文件单独放到一个文件夹中,公共的文件留在resources目录下即可。
Spring、Spring MVC以及mybatis-generator的配置文件属于公用文件,所以他们不用进行隔离,就在resources目录下就好。数据库配置文件、日志文件、项目配置文件、支付宝集成配置文件需要进行隔离,拿一个最典型的例子来说,由于编译环境的不同,当我们的项目上线的时候,需要将支付宝文件中的RSA2密钥以及回调地址全部换为上线的地址,不能够继续使用开发的地址,所以这些文件需要被隔离。
综上,隔离目录初始化为:
五、Maven环境隔离的使用
当我们配置好以后,在Idea的右侧有一个Maven Project,点开它,会发现多出了一个Profiles
因为我们设置了默认编译环境,所以Maven默认勾选了dev环境。当我们使用的时候有两种方法:
(1)、先在Profiles里勾选需要编译的环境选项,最好只勾选一个。然后在Idea的Terminal里执行如下命令:
mvn clean package -Dmaven.test.skip=true
这个是Maven的自带命令,先清除一下包文件再进行打包编译,在编译的同时跳过Maven的单元测试。
(2)、直接在Idea的Terminal中执行如下命令:
mvn clean package -Dmanven.test.skip=true -Pxxx
这个命令的前面是一样的,只不过是多了一个参数-Pxxx,其中xxx表示你想编译的环境,-P表示的是使用Maven编译指令,
例如我想把项目发布到线上,于是我可以这样写:
mvn clean package -Dmaven.test.skip=true -Pprod