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就可以实现分环境打包了~!@

  

 

posted @ 2015-07-20 22:45  Galaxias.Sapphi.REN  阅读(321)  评论(0编辑  收藏  举报