利用maven-assembly-plugin加载不同环境所需的配置文件

背景:

  如何加载不同环境的配置文件已经成了实在必行的,我们通常利用profile进行,详情参见我上篇博客 http://www.cnblogs.com/lianshan/p/7347890.html,但是单单的profile实在无法满足我们的需求,我们将它与maven-assembly-plugin,结合起来,来实现配置分离的问题。

profile不同环境参数设置

  此参数的配置与上篇几乎相同,不过是在properties的属性声明将其与assembly结合起来,具体示例如下。

<profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <env.devMode>dev</env.devMode>
                <skipAssemblyDEV>true</skipAssemblyDEV>
                <skipAssemblyUAT>false</skipAssemblyUAT>
                <skipAssemblyPROD>false</skipAssemblyPROD>
            </properties>
        </profile>
        <profile>
            <id>uat</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <env.devMode>uat</env.devMode>
                <skipAssemblyDEV>false</skipAssemblyDEV>
                <skipAssemblyUAT>true</skipAssemblyUAT>
                <skipAssemblyPROD>false</skipAssemblyPROD>
            </properties>
        </profile>
    </profiles>

我定义了三个环境的相同的四个变量,我在mvn clean  package -P dev 时指定了环境信息,也就相对于制定了变量的值。

可以观察到  skipAssemblyDEV 、skipAssemblyUAT、 skipAssemblyPROD 这三个值都是排他的,聪明的小伙伴已经可能意识到了,一定有三个地方使用了这三个变量,并将他们指向了指定的配置文件。

好我们来观察assembly的相关配置。

<!--assembly test start-->
            <!--this  include  the xml  assembly-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <id>make-assembly-dev</id>  <!--The identifier of this execution for labelling the goals during the build   标志-->
                        <phase>package</phase>      <!--The build lifecycle phase to bind the goals in this execution to  指定其编译阶段-->
                        <goals>
                            <goal>single</goal>     <!--The goals to execute with the given configuration-->
                        </goals>
                        <configuration>
                            <skipAssembly>${skipAssemblyDEV}</skipAssembly>   <!--profile声明参数调用-->
                            <descriptors>
                                <descriptor>src/main/assembly/dev/assembly.xml</descriptor>   <!--加载指定的assembly配置文件-->
                            </descriptors>
                        </configuration>
                    </execution>
                    <execution>
                        <id>make-assembly-uat</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <skipAssembly>${skipAssemblyUAT}</skipAssembly>
                            <descriptors>
                                <descriptor>src/main/assembly/uat/assembly.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                    <execution>
                        <id>make-assembly-prod</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <skipAssembly>${skipAssemblyPROD}</skipAssembly>
                            <descriptors>
                                <descriptor>src/main/assembly/prod/assembly.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--assembly test end-->

首先我们通过 profile声明了相应的参数。

skipAssembly 的解释如下,其声明值true和false 表明我们是否要执行下列声明的配置文件
Flag allowing one or more executions of the assembly plugin to be configured as skipped for a particular build.This makes the assembly plugin more controllable from profiles.

此时我们再来观察下assembly.xml的相关配置文件。
<assembly>
    <id>assembly-${env.devMode}</id> <!--输出文件名-->
    <formats>
        <format>tar.gz</format> <!--打包文件结构-->
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>src/main/assembly/bin</directory>  <!-- 项目文件目录-->
            <outputDirectory>bin</outputDirectory> <!--生成bin目录-->
            <directoryMode>0755</directoryMode> <!--目录执行权限-->
            <fileMode>0755</fileMode><!--文件执行权限-->
        </fileSet>
        <fileSet>
            <directory>src/main/assembly/uat/conf</directory>
            <outputDirectory>conf</outputDirectory>
            <directoryMode>0744</directoryMode>
            <fileMode>0644</fileMode>
        </fileSet>
        <fileSet>
            <directory>lib</directory>
            <outputDirectory>lib</outputDirectory>
            <directoryMode>0744</directoryMode>
            <fileMode>0644</fileMode>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory><!-- 依赖jar包放置目录-->
        </dependencySet>
    </dependencySets>
</assembly>

那么这就是一个完整的利用assembly加载不同环境所需配置文件。

具体的构建完成包结构信息如下,关于target 此块只是tar.gz 与assembly有关,其余的为其他插件使用生成,生成的包结构亦如下:

  

最详细的信息请参考apache官网:https://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html


  

时间: 2024-11-05 15:32:29

利用maven-assembly-plugin加载不同环境所需的配置文件的相关文章

Struts2的国际化(二)-利用超链接实现动态加载国际化资源文件

原理:程序是根据Locale来确定国际化资源文件,因此关键之处在于知道 Struts2 框架是如何确定 Local 对象的 ! 由于Struts2 使用 i18n 拦截器处理国际化,并且将其注册在默认的拦截器中,因此,可以通过阅读 I18N 拦截器知道. 具体确定 Locale 对象的过程: > Struts2 使用 i18n 拦截器 处理国际化,并且将其注册在默认的拦截器栈中 > i18n拦截器在执行Action方法前,自动查找请求中一个名为 request_locale 的参数. 如果该参

重温.NET下Assembly的加载过程

原文:重温.NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没能解决我的问题,有些点写的不是特别详细,让人看完之后感觉还是云里雾里.最后,我决定重新复习一下这个经典而古老的问题,并将所得总结于此,然后会有一个实例对这个问题进行演示,希望能够帮助到大家. .NET下Assembly的加载过程 .NET下Assembly的加载,最主要的一步就是确定As

question --&gt; maven assembly plugin 修改文件默认权限

使用maven assembly plugin插件添加执行脚本时,发现默认权限为644,还需要手动添加执行权限.这很麻烦,于是查看文档 官方文档 http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_fileSet fileMode String Similar to a UNIX permission, sets the file mode of the files included. THIS IS

maven assembly plugin使用

使用场景 在使用maven来管理项目时,项目除了web项目,还有可能为控制台程序,一般用于开发一些后台服务的程序.最近在工作中也遇到了这种场景,使用quartz开发一个任务调度程序.程序中依赖很多jar包,项目的启动时只需要初始化spring容器即可. 使用方法 使用一个简单的基于spring框架的demo来做程序示例,来介绍maven assembly插件的使用方法. 项目中的代码目录如下: 在以上代码目录中,assembly目录下为打包的描述文件,下面会详细介绍该文件,bin目录下为启动脚本

Could not load file or assembly 试图加载格式不正确的程序

问题: 今天发布项目的时候遇到这个破问题,纳闷了好久,最后想起来自己改过程序生成的目标平台(原生成目标平台是Any CPU,被我改成了X86的). 解决方法: 改回原来的Any CPU 从新发布即可. Could not load file or assembly 试图加载格式不正确的程序

python加载django环境

import os import sys ROOT = 'settings.py所在目录' sys.path.append(ROOT) from django.core.management import setup_environ import settings setup_environ(settings) python加载django环境

maven (profiles)装载不同环境所需的配置文件

引子: maven与java的联系在今天的项目已经是不可分割的 ,但是不同的项目有各具特色的项目结构,不同的项目结构使用了不同的maven插件,想要了解一个项目的项目结构,或者自己构建一个具有成熟结构体系的项目,那么,了解到熟悉的使用maven插件那么就是势在必行的了. maven装载不同环境所需的配置文件 场景: 企业及应用,摆脱不了三个环境,研发环境,测试环境,生产环境,或者灰度环境,甚至更多.不同的环境 有不同的配置,那么如何在项目发布打包时将所需的配置正确的装载呢. 正常情况下,这些不同

spring加载jar包中多个配置文件(转)

转自:http://evan0625.iteye.com/blog/1598366 在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:beanconfigs/applicationContext_1.xml, classpath*:

Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新

Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新 摘自: https://blog.csdn.net/johnson_moon/article/details/78874499 2017年12月22日 16:20:29 阅读数:868 标签: javalogback日志配置文件logback-xm 更多 个人分类: Java日志 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/johnson_moon/article/d