来百度上研一个半月了,屁股还没做热,就进入大客户关键词推荐项目组,虽然是个线下的项目,但是我毕竟算刚来的,只能靠加班来迎头赶上了,不过好在功夫不负有心人,上周五终于将这个项目上线了,这个项目总体来说并不难,而且还是升级,所以一个半月就搞定了,上线时遇到让人崩溃的问题。由于是个线下项目,就一台机器让项目使用,老项目和新项目都在一起,这就意味这必须让新项目很快部署成功,因为在部署的时候老项目不能使用了,可是由于经验不足,根本没做自动化部署,而是手动地将测试环境切换为生产环境,周末总结上线过程,偶然发现maven可以灵活的构建项目,达到一键切花环境的效果。
一个优秀的构建系统必须足够灵活,它应该能够让项目在不同环境下都能成功地构建。例如,典型的项目都会有开发环境、测试环境和生产环境(产品环境),这些环境的数据库配置不尽相同,那么项目构建的时候就需要能够识别所在环境并使用正确的配置。还有一种常见情况,项目开发了大量集成测试,这些测试运行起来非常耗时,不适合在每次构建项目的时候都运行,因此需要一种手段能让我们在特定时候才激活这些集成测试Maven为了支持构建的灵活性,内置了三大特性,即属性、Profile和资源过滤。
让我彻底解决了项目自动化部署难题的是资源过滤特性的运用,这点我 会详细介绍,稍微简单地普及一下属性和Profile特性吧。
首先Maven属性,我们可以通过<properties>元素定义一个或多个Maven属性,然后在POM的其他地方使用${属性名}的方式引用该属性,这种做法最大意义在于消除重复,而且如果日后涉及到升级版本,工作量会大大降低,而且减少错误率。
这不是Maven属性的全部,事实上只是6类Maven属性的一类而已,这6类属性分别为:
1.内置属性:主要有两个常用的内置属性——${basedir}表示项目根目录,即包含pom.xml文件的目录;${version}表示项目版本;
2.POM属性:用户可以使用该类属性引用POM文件中对应元素的值。例如:${project.artifactId}就对应了<project><artifactId>元素的值,常用的POM属性有:${project.build.sourceDirectory}:项目的主源码目录,默认为/src/main/java/. ${project.build.directory}:项目构建输出目录,默认为/target/。
3.自定义属性:用户通过<properties>来定义自己的属性
4.Settings属性:与POM属性相似,用户可以用settings.开头的属性引用settings.xml文件的XML元素的值,如常用${settings.localRepository}指向用户本地仓库的地址
5.java属性:所有java系统属性都可以使用Mave属性引用,例如${user.home}指向了用户目录
6.环境变量属性:所有环境变量都可以使用env.开头的Maven属性引用,例如,${env.JAVA_HOME}指代了java_home环境变量的值。