Maven 的 Web 项目使用 war 插件针对不同环境打包
我们介绍 Maven 的 Web 项目使用 war 插件针对不同环境打包。这是我在 BAE 部署自己的博客应用的时候整理的一种方案,供大家参考。
最最重要的思路其实就一条:打包之前替换配置文件,从手动变为自动。重点内容
需求的提出:
在开发阶段,我们的 MySQL 数据库连接配置基本上都连着本机数据库, Lucene 索引存放目录基本上是开发者本机的一个目录。但是到了生产环境部署的时候, MySQL 数据库的连接配置和 Lucene 索引存放目录就是另外一个配置了。
那么,我们在打包到生产环境之前是不是要手动将这些配置替换一下呢?
如果手动这样做的话,就显得不灵活,很笨拙了。
好在 Maven 这项工具早就帮我们想到了这个问题。下面我就介绍一下,我在自己的项目 Blog 中是如何操作的。
思路分析:
1、自己的项目里只要是有配置的地方,不要写死在源代码目录(src/main/java)中,而要将配置的信息写在资源目录中 (src/main/resources);
2、即使是写在资源目录中的代码,也尽量将特殊化的配置信息写在配置文件中,这样做的好处有以下两点:
(1)配置信息一般是比较重要的,尤其是生产环境中的配置信息,现在很多代码开源了以后,开发者如果将配置信息提交到 Git 仓库中,很有可能造成一些安全隐患(服务器的连接参数都暴露了,你说能安全吗?),所以一般情况下,这些重要的服务器配置文件应该被 Git 排除掉;
(2)分离出配置信息成为单独的配置文件也方便开发者进行单独管理。
这样开发者将代码开源以后即使不给出配置文件的代码,其他学习者拿到项目以后仍然可以根据 ${db.username} 这样的代码填写出自己本地的配置信息。
即:我们不建议这么做。
12345
应该这样做:
1
12345
在 config/jdbc.properties 文件中写:
db.url=jdbc:mysql://localhost:3306/db_blog?useUnicode=true&characterEncoding=UTF-8
db.username=root
db.password=123456
123
3、在资源目录下建立不同环境的文件夹,有几个环境,就应该建立几个文件夹;
4、使用 Maven 的 war 插件,使用命令指定打包参数,在打包之前替换那些重要的配置文件,就可以针对不同的环境打出适合这些环境的 war 包了。
具体配置代码分析
1、声明主资源目录
123456789101112131415161718192021
2、声明 profile
12345678910111213141516171819
特别说明:profile 中的 id,自定义的环境变量 package.environment 的值,和“思路分析3”中建立的不同环境配置文件存放的目录名称应该是一致的,这也叫约定大于配置,这样的约定就可以少配置很多东西了。
3、声明 war 插件