zoukankan      html  css  js  c++  java
  • 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就可以实现分环境打包了~!@

      


    作者:牧伯流水
    World need ur smile O(∩_∩)O Copyright ©2015 Galaxias.Sapphi.REN

  • 相关阅读:
    基于NFS共享存储实现KVM虚拟主机动态迁移
    基于mysqld_multi实现MySQL 5.7.24多实例多进程配置
    LVS负载均衡实现双向设备
    基于Haproxy构建负载均衡集群
    基于Haproxy+Keepalived构建高可用负载均衡集群
    nginx与keepalived实现高可用
    直接路由模式(LVS-DR)
    Tomcat多实例配置
    Tomcat 安全优化
    基于 Jenkins + Git 项目 中Git主机的 安装配置
  • 原文地址:https://www.cnblogs.com/Galaxias-Sapphi-REN/p/4662963.html
Copyright © 2011-2022 走看看