利用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>false</skipAssemblyDEV>
<skipAssemblyUAT>true</skipAssemblyUAT>
<skipAssemblyPROD>true</skipAssemblyPROD>
</properties>
</profile>
<profile>
<id>uat</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<env.devMode>uat</env.devMode>
<skipAssemblyDEV>true</skipAssemblyDEV>
<skipAssemblyUAT>false</skipAssemblyUAT>
<skipAssemblyPROD>true</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
利用maven-assembly-plugin加载不同环境所需的配置文件及使用场景的更多相关文章
- maven (profiles)装载不同环境所需的配置文件
引子: maven与java的联系在今天的项目已经是不可分割的 ,但是不同的项目有各具特色的项目结构,不同的项目结构使用了不同的maven插件,想要了解一个项目的项目结构,或者自己构建一个具有成熟结构 ...
- 重温.NET下Assembly的加载过程
最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没能解决我的问题,有些点写的不是特别详 ...
- 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
重温.NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后 ...
- NET下Assembly的加载过程
NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没 ...
- Django_在单独文件中加载Django环境临时调试
创建Django环境后,每次在打印调试都需要基于项目有些麻烦. 如何在项目外的文件中加载项目环境进行便携的调试? 创建一个新的 orm.py import os if __name__ == '__m ...
- 记录一次maven打包时将test目录下的类打包到jar中,Maven Assembly Plugin的使用
今天有人问我打包后找不到主类,运行的类写在test中.按照常规,test目录下的文件不会打包到jar包中.(但是我测试一个springboot工程就可以,这里之后再研究) 具体解决如下 第一步:在po ...
- Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新
Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新 摘自: https://blog.csdn.net/johnson_moon/article/details/7887449 ...
- maven pom.xml加载不同properties配置[转]
可以参考http://www.openwebx.org/docs/autoconfig.html 1.pom.xml =========================== <!-- 不同的打包 ...
- idea开发maven项目热加载
JavaWeb项目,尤其是一些大型项目,在开发过程中,启动项目耗费的时间就不短.大大的拖慢了开发速度!在这分享一种不需要插件就能实现热加载的方法! 默认已经创建好一个Maven项目 点击此按钮 点击 ...
随机推荐
- (转)ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo
原文出处:http://blog.sina.com.cn/s/blog_a04184c101010kry.html 警告:错误的EDID会造成HDMI发声异常 #title:box:HDMI Audi ...
- php -- 取日期
1.获取当前时间方法date()很简单,这就是获取时间的方法, 格式为:date($format, $timestamp), format为格式 - 必需 timestamp为时间戳–可填参数. 比如 ...
- python 模块之间相互引用
模块层级关系: ----: |->AA.py |->BB.py |->CC.py AA.py from BB import BB class AA: def sub(self, x) ...
- Linux内核剖析 之 内存管理
1. 内存管理区 为什么分成不同的内存管理区? ISA总线的DMA处理器有严格的限制:仅仅能对物理内存前16M寻址. 内核线性地址空间仅仅有1G,CPU不能直接訪问全部的物理内存. ZONE_DMA ...
- ubuntu server install 安装中文(搜狗)输入法
1.对于ubuntu server默认无中文输入法框架,我比较倾向于我一直使用的ibus-sunpinyin.这里我需要先安装ibus的框架 不过我遇到了问题: dpkg: dependency pr ...
- Ubuntu 使用文件 casper-rw 镜像文件 保存变更内容
yumi工具本可以制作基于u盘的persistent启动盘 casper-rw是ubuntu特有的一种功能,支持liveCD启动的ubuntu系统保存用户的变更内容 那我们想同iso光盘从硬盘上启动, ...
- 怎样用MathType创建竖式算法
在使用MathType编辑公式时,有时将最简单的表达式变成Word文档也会出现一些问题.比如MathType竖式.下面介绍MathType竖式的一些编辑方法. 步骤如下: 步骤一:在MathType底 ...
- 最值得一看的几条简单的谷歌 Google 搜索技巧,瞬间提升你的网络搜索能力
可能你和我一样,几乎每天都必须与搜索引擎打交道,不过很多时候,你辛辛苦苦搜了半天也没找到合适的资料,然而“高手们”上来一眨眼功夫就能命中目标了.这并不是别人运气好,而是搜索引擎其实是有很多技巧可以帮助 ...
- 记录下一个自己不常用的关键字-yield
yield 这个关键字 一直很少用,也不知道具体用途.按照习惯就查询了下MSDN. 意思大致是这样的:在迭代器块中用于向枚举数对象提供值或发出迭代结束信号 表现形式:1. yield return & ...
- HTML&CSS精选笔记_布局与兼容性
布局与兼容性 CSS布局 版心和布局流程 为什么要应用布局? 阅读报纸时容易发现,虽然报纸中的内容很多,但是经过合理地排版,版面依然清晰.易读.同样,在制作网页时,要想使页面结构清晰.有条理,也需要对 ...