关于项目的构建与打包_构建和打包的区别_五二言的博客-程序员宅基地

技术标签: 项目构建  java  项目与产品之道  

在项目的部署当中,难免牵涉到开发环境、测试环境以及生产环境的切换,如果缺失一套良好的项目构建以及部署方案,那么我们很容易因为反复修改配置文件而酿成开发事故,毕竟线上和测试的配置很多不同。所以拥有一套比较良好的项目构建和部署方案是必须的。

目前构建项目是用Maven来进行的。Maven提供Profile功能来满足项目的可移植性构建的需求。

以下简单说下我的项目的配置。

该工程采用了Maven进行构建,同时采用Spring作为工程框架。在开发到产品上线这个过程中,产品会分别部署在开发环境、测试环境以及生产环境中(当然这是我的相关部署环境,其他项目可以根据自己的需要进行划分)。在这三种环境下,应该拥有自己所属的配置文件。

可移植构建的一个基本思路是让项目运行的过程中选择正确的配置文件进行加载。根据这个基本思路,我们可以让项目构建的时候只包含对应环境的配置文件,比如我们需要构建线上环境的War包,只需要build的时候,让War里面只含有Online文件夹下的配置文件即可,其他的不打包。

在工程目录resource文件夹下,分别建立三个文件夹dev、test以及online,然后放置对应环境的配置文件,配置文件最好以properties作为后缀。
这里写图片描述

同时,我们在Maven的POM.xml写上我们的配置策略。

<profiles>
    <profile>
        <id>test</id>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>*</include>
                        <include>test/*</include>
                    </includes>
                    <excludes>
                        <exclude>online/*</exclude>
                        <exclude>dev/*</exclude>
                    </excludes>             
                </resource>
            </resources>        
        </build>    
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>

    <profile>
        <id>online</id>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>*</include>
                        <include>online/*</include>
                    </includes>
                    <excludes>
                        <exclude>test/*</exclude>
                        <exclude>dev/*</exclude>
                    </excludes>             
                </resource>
            </resources>        
        </build>    
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>

    <profile>
        <id>dev</id>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>*</include>
                        <include>dev/*</include>
                    </includes>
                    <excludes>
                        <exclude>test/*</exclude>
                        <exclude>online/*</exclude>
                    </excludes>             
                </resource>
            </resources>        
        </build>    
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
  </profiles>

这样配置后,每次在eclipse的工程右键进行Maven Build时,进行相应模式的Build,即可构建对应环境的工程包。至于不同环境的构建命令可到Run——Maven-build进行配置。如下图:
这里写图片描述

-P后面对应的是之前在POM.xml文件上写的profile的id。

由于项目的框架采用Spring作为框架,Spring在初始化的时候会自动加载application.xml配置文件(当然这个配置文件可以在WEB-INF/web.xml进行配置管理)
在这里我们可以这样配置相关的文件加载:
这里写图片描述

至此,可移植性项目构建已经完成。之后只要对着项目点击右键选择相对应的maven-build语句即可完成项目构建。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wueryan/article/details/50209317

智能推荐

DialogFragment与Activity通信最佳实践_Ethan_KF的博客-程序员宅基地

这篇博客与上篇http://blog.csdn.net/ethanhola/article/details/50888410组成一个Surfaceview中自由手绘的demo,源码地址:https://github.com/boomstack/MySurfaceView 欢迎follow and fork! Google推荐使用DialogFragment创建对话框,因为Android系统设计的

GlusterFS无法启动原因及处理方案_weixin_33755649的博客-程序员宅基地

启动结果:Redirecting to /bin/systemctl status glusterd.serviceglusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled)...

C# 在Word文档中生成条形码_zhaohongyan6的博客-程序员宅基地

简介条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称、制造商、类别、价格等。目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书还是各种商品上都随处可见,扫描条形码就可以查询这个商品的信息,非常方便。生成生成条形码分为两步,第一步需要先下载并在系统上安装条形码字体,安装条形码字体的步骤如下:1.条形码的字体有很多种,如code39

理解RNN_恐龙岛_恐龙岛博客_宗介l的博客-程序员宅基地

n_x,n_y:对一个样本而言,在某一个时间步输入输出向量的维数na:对一个输入样本而言,在一个时间步隐藏状态的数目现在训练由字母生成合适的单词(恐龙命名):X为训练样本中某个单词的字母列表,如X[a,b,c,z],正式处理前需要将其转换为独热码X[[0000],[10000],[01000],[001000],[000001]] (即:X[None,1,2,3,26])X左移生成Y – 整数列表,与X完全相同,但向左移动了一个索引。初始化a-1等参数之后,现在通过for循环将X[0]、X[

刷脸支付:移动支付行业的下一个增长极_winbox2019的博客-程序员宅基地

刷脸支付:移动支付新方式经历了现金支付、刷卡支付、扫码支付的变迁后,现如今,“刷脸支付”这种让人耳目一新的便捷支付方式正在逐渐融入人们日常生活之中。随着人脸识别相关技术不断成熟,5G移动网络的商用落地,用户追求更轻便、更简易、更快速的支付体验,在可以预见的将来,刷脸支付即将成为移动支付行业的下一个增长极。商家如何接入刷脸支付?刷脸支付是完全脱离介质的一次支付变革,对刷脸支付的深度开发进一...

拖动层+滤镜_weixin_33749242的博客-程序员宅基地

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;&lt;html&gt; &lt;head&gt; &lt;title&gt; New Document &lt;/title&gt; &lt;meta nam...

随便推点

iframe包含的页面如何能够调用到父级页面的js方法_iframe 引用上级js_指尖de柔情的博客-程序员宅基地

今日这个页面里面通过iframe包含昨日和明日的这两个页面;要想昨日和明日的这两个页面能够引用到今日这个页面里面的js方法;主要是想利用poptodaymeetDiv这个div;可以弹出一个div进行会商添加;应该用top.今日里面的方法();在index.jsp中:function edittodaysub(){ //alert("今日会商"); var url = "

Apache的配置与应用(构建虚拟web主机、构建虚拟目录和用户授权限制、日志分割、awstats分析系统)_apache 限制ip访问_奶瓶还给我的博客-程序员宅基地

文章目录一、构建虚拟web主机(一)、虚拟web主机概述(二)、基于域名访问虚拟主机步骤一、构建虚拟web主机(一)、虚拟web主机概述虚拟web主机指的是在同一台服务器中运行多个web站点,其中每一个站点实际上并不独立占用整个服务器,因此被称为虚拟web主机。通过虚拟web主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行的成本。使用httpd服务可以非常方便的构建虚拟主机服务器,只需要 运行一个httpd服务就能够同时支撑大量的web站点。httpd服务支持的虚拟主机类型包括以下三

大数据量导出心得 SXSSFWorkbook_sxssfworkbook 大数据量_风寻江面的博客-程序员宅基地

一开始做导出excel我是拒绝的。但是前端人员说回家特效duang,duang的。于是我认识了SXSSFWorkbook。 开始做导出使用的poi的标准写法。可是随着真实数据的海量降临,先是jvm内存溢出。这让人很头疼,于是我转换了一个思路。数据不一次性查出来,为数据查询做出分页。逐次放入poi的 Sheet 里面。本想着问题就这样被我简单解决了。可是内存又溢出了。这次是poi的内存溢出。 ...

关于web.xml中的<welcome-file-list>中的默认首页文件_huangmr0610的博客-程序员宅基地

先看我的配置文件: Java代码        index.html    很普通,没有任何问题。但是访问http://localhost/的时候,不会去找index.html,出现404错误。 如果手工输入http://localhost/index.html又可以访问。 问题出在哪呢?整了好几天,今天总算搞明白了: 我

什么是Ruby on Rails_cowboy_wz的博客-程序员宅基地

让我们先来看一张图片: 看完这张图片,我心里充满疑惑,难道Ruby + Rails真的能够有这么好吗? 心里有这么几个疑问:Ruby是谁开发的? Ruby是什么? Rails是什么? Ruby on Rails与目前已经有的开发语言相比有什么优点?为什么要使用它? Ruby on Rails稳定吗?效率高吗?能够承受大数据量的访问吗? Ruby on Ra

velocity布局layout_lihfqq的博客-程序员宅基地

从VelocityViewServlet到VelocityLayoutServlet  使用Velocity开发web应用时,需要在web.xml中配置一个Velocity提供的VelocityViewServlet接受处理对velocity模板(即vm文件)的forward访问。(MVC,view只是做展示,通过control,转发到view)VelocityViewServlet负责...

推荐文章

热门文章

相关标签