谈谈项目中分环境打war包的方式


placeholder image
admin 发布于:2015-08-22 21:09:10
阅读:loading

基本介绍

工作的时间越久接触到的问题也越多了,包括已解决或者未很好的解决,这里跟大家分享一下我对项目中分环境打war包的方式的了解,这里所说的环境指的是:本地开发环境、测试环境、生产环境(或许还有qa、准生产等)。在继续往下说之前我先说一下解决这种问题的一些常见解决方式:

1)直接去tomcat的webapps目录下拷贝,拷贝一份儿文件出来,在本地将其改成适应其他环境适配的参数,然后再将修改后的文件作为某个环境下的允许代码。

2)将每次部署调整的相关配置文件按照环境去存储多份儿,当然是与实际项目的路径保持一致,每次使用IDE自带的功能去导出war包,使用解压缩软件将其打开后替换。

3)使用ant或者maven构建工程,专门去解决这种分环境打war的问题。

4)自己写一个文件替换程序,按照自己规定的规则去替换文件,呵呵。

还记得去年我从网上找了很多资料,汇集起来选最优(或者跟自己现状相符的maven解决方案)进行实现,终于还是没很好的解决。而这个问题作为我脑海中的遗留问题之一,后来使用了同事的解决方案(今天跟我的工程哥讨论到这里,我又查了查资料)。

由于项目的相关配置文件只是使用到了properties类型,且有spring环境,那么我们约定所有的参数配置文件都放置在src/config目录下,而所有需要区分环境的配置文件则均以-XXX结尾,比如相关文件有:jdbc-dev.properties,jdbc-test-properties,jdbc-prod.properties等等,那么我们可以很好的使用spring

的注入来按照我们的实际需要去注入某个环境下的相关配置文件,代码参考如下:

<bean id="mappings"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="locations">
         
<value>classpath:config/common.properties</value>

         <value>classpath:config/*-dev.properties</value>

    </property>
</
bean>

       这种方式很方便的解决了一些properties格式的打包问题,而且每次打包完之后也只需要修改这个*-XXX的后缀,我觉得也还算很简单的了,但是不足也很明显,比方说我要是有xml格式的配置文件呢,这可如何是好。这里我们重点讨论一下maven是怎么配置实现的。通过以前的查阅资料和使用maven构建项目的使用经验,我找到了两种常见的办法,详细介绍如下:

实现方式

1、配置简单,适合小型项目使用,如下:

image.png


image.png


image.png


使用这种方式有其特殊性,如不能直接部署项目至tomcat了,得需要中转一下,首先将源码工程按照某个环境进行打包,比如说按照dev环境打包,则会在target目录生成一堆文件,其中里面就有编译后的代码包,我们将编译后的路径放置在%TOMCAT_HOME%\conf\...目录下进行发布来运行。
以上将所有的配置全部集中在同一个pom.xml文件中了,如果配置参数项实在是多的话,那其实也很难受。
2、拆分多个pom.xml
       同上面一种方式的实现原理,将pom.xml拆分成多个文件,如pom-dev.xml和pom-prod.xml,在不同的文件中配置不同的打包信息,最后使用打包命令来指定打什么环境的jar,这种方式能防止pom.xml文件过大的问题,但汤换了,药没换,不再提供实现。
3、使用maven-war-plugin插件来解决(推荐使用)
       重点说一下这种方式吧,因为它跟我实际工作中使用到的方式最为接近,而且能解决相应的打包问题。我们通常是将一个maven构建的项目跟普通的web项目一样,直接发布到tomcat下面运行,基本没有任何区别,故相关区分环境的配置文件默认值都是本地开发的值,那么此插件的作用就是,指定一个源目录,然后指定区分打包环境的目录文件,根据本次指定的打包环境来实现文件的替换,比如src/main/resources目录下有一些配置文件,拿jdbc.properties为例,正常情况下的文件命名,其他环境打包时使用的此文件分别为prod/jdbc.properties,或test/jdbc.properties,文件目录不同,那么当我们使用相关prod命令来打包时,这些源文件都被特定路径下的同名文件覆盖,这种方式可以很好的解决我们分环境来部署项目的问题,详细参考如下:

image.png

 

image.png

当然更建议使用第二种方式,其实在分环境部署时有的情况还不仅仅考虑本地与测试服务器的环境问题,有的时候需要考虑的是windows与linux的环境问题,拿dll类型文件来说,在linux下类型则变成了so类型,这种也是需要替换的一种,等后续有这种需求时再议。

本文章主要介绍了个人共组当中遇到的一些常见而繁琐的打包问题的总结,当然也有参与使用ant的方式去打包,并没有说哪种一定要好,哪种一定不好,我们集它们的所长能够灵活应用即时最好的方式,毕竟这属于一种萝卜白菜类型的问题。 

相关下载

分享链接已失效


上述许多内容已经过时和过期了,留存本篇文章仅为方便个人查看,原始文章的信息参考:

原始链接:https://www.chendd.cn/information/viewInformation/workUsed/138.a

最后更新:2015-08-22 21:09:10

访问次数:796

评论次数:0

点赞个数:2,[相当给力:2]

 点赞


 发表评论

当前回复:作者

 评论列表


留言区