MAVEN初级应用之分环境构建

Chapter one . Article Purpose

  前段时间总结了maven一些知识点,都是概念性和理解性的描述,对于应用方面乏陈可言。

  这里分享下我在日常项目开发中普通项目简单的分环境打包。:)

  这样的文章很多,但是在这里出现的才是我最喜欢的。

Chapter two . Build in Pom.xml

  MAVEN应用的最佳实践可以说就是配置pom.xml文件的过程。

  这里当然要简单分析下pom.xml文件的构建过程。

  首先一个普通的项目,应该包含对成熟中间件的依赖和第三方jar包的依赖。然后我这里忽略其他插件造成的影响。采用maven生命周期默认插件。

  build过程一般发生在编译过程中,pom.xml文件中build节点很详细的描述了编译过程中构建源码和资源的位置和目标。

 1 <!-- 描述构建过程 -->
 2 <build>
 3         <finalName>sapphire</finalName><!-- 最终生成应用名称 -->
 4         <defaultGoal>install</defaultGoal><!-- 发生阶段 -->
 5         <directory>${basedir}/target</directory><!-- 目标路径 -->
 6         <!-- 源路径和编译路径
 7         <sourceDirectory>${basedir}/src</sourceDirectory>
 8         <outputDirectory>${basedir}/target/classes</outputDirectory>
 9         -->
10         <filters><!-- 过滤器,指定过滤属性文件配置 -->
11             <filter>src/main/resources/env/
12                                filter-${env}.properties</filter><!-- 过滤文件 -->
13         </filters>
14         <resources><!-- -->
15             <resource>
16                 <directory>src/main/resources</directory>
17                 <filtering>true</filtering>
18                                 <!-- 将过滤文件键值对配置到被过滤文件中 -->
19                 <includes>
20                     <include>config.properties</include>
21                 </includes>
22             </resource>
23                         <!-- 包含的资源 -->
24             <resource>
25                 <directory>src/main/java</directory>
26                 <includes>
27                     <include>**/*.xml</include>
28                 </includes>
29             </resource>
30             <resource>
31                 <directory>src/main/resources</directory>
32                 <includes>
33                     <include>*.*</include>
34                 </includes>
35             </resource>
36         </resources>
37     </build>        

  经过这样的配置,你就可以在mvn clean install后获得一个sapphire.war的应用。(如果应用package为war)

  

  备注:过滤文件中若配置了 name=sapphire会在被过滤文件中寻找${name}并填充。

  这是我们在被过滤文件<filtering>true</filtering>中配置 name=${name}相当于name=sapphire。

  如果你第一次看类似文章,你一定很疑惑${env}和${basedir}是什么。

  maven运行时参数分为两种,一种是默认参数,如${basedir}等,还有一种就是我们说的自定义参数啦。

  说明如何通过自定义参数分环境构建前,我想提出两点,是我曾经遇到的坑。

过滤文件应满足开闭原则

  我曾经将所有资源配置的resource节点下都配置了<filtering>true</filtering>

  这导致了过滤文件对我所有的资源文件都进行过滤配置。resource资源下除了基本MVC配置外还经常存在一些常用的资源文件。我有一次放了一些itext加载的字体文件ttc ttl,导致过滤后字体文件平白无故增加十几M而失效不识别。

  所以过滤文件请配置的足够精细。

理解resource目录

  resource目录中经常放置系统配置文件和常用资源。

  如:数据库连接以及连接池常量配置。

    FTP连接以及连接池常量配置。

    Webservice Hessian HttpInvoker Rest接口URI配置。

    MVC基本配置。

    第三方工具常量配置。

    ......

    还有一些系统希望通过getResource()加载的系统资源文件,如我上面描述的字体文件。

    

  当你配置resource时,如果遗漏下部分配置文件,是不会将那些文件打包的。在install后,他们统统在WEB-INF/classes目录下。

Chapter three . within Different Environment

  分环境打包分参数构建是企业级maven应用最常见的模式。

  在项目过程中,开发环境一般分为:

    开发环境:dev

    测试环境:test

    生产环境:pro

  大量的参数配置和IP地址配置(cas sso)会增加项目上线时的错误可能性。我们这里引入maven的运行时参数概念。

 1 <profiles>
 2         <!-- 开发环境,默认激活 -->
 3         <profile>
 4             <id>dev</id>
 5             <properties>
 6                 <env>dev</env>
 7                 <maven.test.skip>true</maven.test.skip>
 8             </properties>
 9             <activation>
10                 <activeByDefault>true</activeByDefault>
11             </activation>
12         </profile>
13         <!-- 测试环境 -->
14         <profile>
15             <id>test</id>
16             <properties>
17                 <env>test</env>
18             </properties>
19         </profile>
20         <!-- 生产环境 -->
21         <profile>
22             <id>pro</id>
23             <properties>
24                 <env>pro</env>
25             </properties>
26         </profile>
27         <!-- 生产环境 -->
28     </profiles>

  在刚才配置build节点的pom.xml文件中配置如上信息。

  一目了然。

  当你运行mvnclean install时,将env参数添加到maven内部环境变量中。这里配置的默认值为dev,

  意味着我们一开始配置的过滤文件

    src/main/resources/env/filter-${env}.properties    ---->    src/main/resources/env/filter-dev.properties

  系统将默认读取过滤文件中的配置填充到被过滤文件config.properties中。

  当你需要测试环境和生产环境时。只需要在命令行输出参数:

  mvn clean install -P test 或者 mvn clean install -P pro就可以实现分环境打包了~!@

  
时间: 2024-11-03 01:25:16

MAVEN初级应用之分环境构建的相关文章

maven 分环境打包

一,创建分环境属性配置文件 src/build-config/build-develop.propertiessrc/build-config/build-product.propertiessrc/build-config/build-test.properties 例: build-develop.properties #数据库配置build.jdbc.url = jdbc:oracle:thin:@ip:port:databasebuild.jdbc.username = namebuil

Windows 下 Qt Creator 5.3.1 环境构建

首先,要下载到Qt for Windows.Qt已经正式分割成两个开源和商用两个不用的项目.我们需要在开源上下载Qt的安装程序(地址:http://qt-project.org/downloads). 开源 : http://qt-project.org/ 商用 : http://qt.digia.com/ 可以看到很多个版本,这里任意一个 for windows 的版本都有带Qt Creator,可以根据你VS的版本选择.我已经习惯了Qt Creator所以使用的是Qt 5.3.1 for W

Maven搭建struts2+spring+hibernate环境

Maven搭建struts2+spring+hibernate环境(一) 本文简单的使用STS的自带的maven插件工具搭建ssh(struts2+spring+hibernate)开发环境,图文并茂,简单上手,适合新手. 关于STS的介绍,请参考另一篇文章<Java IDE介绍:Spring开发利器-spring-tool-suite>地址:http://blog.csdn.net/sgl731524380/article/details/8831540 首先,STS自带的maven的插件已

Vue项目分环境打包的实现步骤

转:https://blog.csdn.net/xinzi11243094/article/details/80521878 方法一:亲测真的有效 在项目开发中,我们的项目一般分为开发版.测试版.Pre版.Prod版.Vue-cli的默认环境一只有dev和prod两个,之前每次要发布测试版或Pre版都是修改了源码中API地址后打包,这样很麻烦.如果能根据不同环境打包就完美了.网上搜集了许多资料,现在可以分环境打包程序了,至于怎么打,接着住下看吧. 第1步:安装cross-env 在项目目录下运行

CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装

CentOS 7 下 JDK1.8 Maven Nginx MySql Git Redis环境安装 安装目录准备 新建data目录,用来放下载的软件 mkdir -p /data 切换到该data目录 cd /data JDK1.8安装 JDK下载 如果需要用户密码,注册一个即可 用winSCP上传到服务器data目录下 解压文件 tar -zxvf jdk-8u211-linux-x64.tar.gz Maven安装 maven下载 wget http://mirrors.gigenet.co

OpenAI Gym 入门与提高(一) Gym环境构建与最简单的RL agent

Openai gym是一个用于开发和比较RL算法的工具包,与其他的数值计算库兼容,如tensorflow或者theano库.现在主要支持的是python语言,以后将支持其他语言.gym文档在https://gym.openai.com/docs. Openai gym包含2部分: 1.gym开源库:包含一个测试问题集,每个问题成为环境(environment),可以用于自己的RL算法开发.这些环境有共享的接口,允许用户设计通用的算法.其包含了deep mind 使用的Atari游戏测试床. 2.

jenkins+git+maven搭建自动化部署项目环境

简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/jacky-        lulu/cxf_demo-Maven-Webapp)     系统:centos6.5 maven: Apache Maven 3.3.9 git:git version 2.0.0 1.首先安装git,看以前另外一篇博客 http://www.cnblogs.co

Cocos2d-x v3.1 GUI系统--环境构建(七)

Cocos2d-x v3.1 GUI系统--环境构建(七) 在使用Cocos2d-x的GUI系统时,由于生成的工程默认是没有将GUI系统所需的库导入到项目的,所以我们必须把库导入到工程中并对工程做一些配置才能够使用GUI系统.这篇文章我们先在配置Windows上的环境,并对GUI系统中的组织结构进行一个介绍,然后我们会写一个简单的Demo来测试我们配置的环境,最后我们配置Android环境,同样的也是通过此Demo进行测试. Windows平台环境配置 在工程目录下,我们先找到所依赖的库.GUI

在centos (linux) 搭建 eclipse c++开发分环境

网上说得很多,很烦,操作了很多,总有错误,但解决方案很简单.步骤就下面几步就OK了 安装gcc .g++ yum install gcc yum install gcc-c++ 安装jdk,配置jdk的环境(网上很多,就不用多说了)  下载软件: eclipse:   http://www.eclipse.org/downloads/?osType=linux CDT  :  http://www.eclipse.org/cdt/downloads.php eclipse 解压就可以使用. CD