当前位置: 首页 > 编程日记 > 正文

AutoConfig工具使用

下载安装Auto工具包:

  • http://code.taobao.org/mvn/repository/com/alibaba/citrus/tool/antx-autoconfig/1.0.9/antx-autoconfig-1.0.9.tgz
  • http://code.taobao.org/mvn/repository/com/alibaba/citrus/tool/antx-autoexpand/1.0.9/antx-autoexpand-1.0.9.tgz
tar zxvf autoconfig-1.0.9.tgz
tar zxvf autoexpand-1.0.9.tgz
cp autoconfig /usr/local/bin
cp autoexpand /usr/local/bin
------------------------------------------------------------------------------------------------------
引:<filter>${user.home}/antx.properties</filter>
用指定的properties文件(${user.home}/antx.properties)中的值,替换上述文件行中的placeholders(占位符)

AutoConfig不需要提取源码,也不需要重新build,即可改变目标文件中所有配置文件中placeholders的值,并对placeholder及其值进行检查。

AutoConfig Features

名称描述
两种用法
  • 既可独立使用(支持Windows和Unix-like平台)。

  • 也可以作为maven插件来使用。

对目标文件而不是源文件进行配置
  • 可对同一个目标文件反复配置。

  • 配置时不依赖于项目源文件。

  • 支持嵌套包文件,例如:ear包含war,war又包含jar。

  • 高性能,特别对于嵌套的包文件。

验证和编辑properties
  • 自动发现保存于war包、jar包、ear包中的properties定义

  • 验证properties的正确性。

  • 交互式编辑properties。

  • 当配置文件中出现未定义的placeholders时,提示报错

/META-INF/autoconf目录用来存放AutoConfig的描述文件,以及可选的模板文件。

auto-config.xml是用来指导AutoConfig行为的关键描述文件

创建war和jar包的AutoConfig机制,关键在于创建war或jar目标包中的/META-INF/autoconf/auto-config.xml描述文件

-------------------------------------------------------------------------------------------------------------

AutoConfig描述文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<config><group><property name="petstore.work"description="应用程序的工作目录" />
        <property name="petstore.loggingRoot" defaultValue="${petstore.work}/logs"description="日志文件目录" /> 
        <property name="petstore.upload"defaultValue="${petstore.work}/upload"description="上传文件的目录" />
        <property name="petstore.loggingLevel"defaultValue="warn"description="日志文件级别"> 
            <validator name="choice"choice="trace, debug, info, warn, error" /> 
        </property></group><script><generate template="WEB-INF/web.xml" /> 
        <generate template="WEB-INF/common/resources.xml" /></script>
</config>

   

定义properties

定义property的验证规则(可选)

生成配置文件的指令。

定义一个property的完整格式如下

例如下定义一个property

<propertyname="..."[defaultValue="..."][description="..."][required="true|false"]
><validator name="..." /><validator name="..." />...
</property>

可用的property参数包括:

定义property时可用的参数如下:

参数名说明
nameProperty名称。
defaultValue(可选)默认值。默认值中可包含对其它property的引用,如${petstore.work}/logs
description(可选)对字段的描述,这个描述会显示给deployer,这对他理解该property非常重要。
required(可选)是否“必填”,默认为true。如果deployer未提供必填项的值,就会报错。
定义property的验证规则

目前,有以下几种验证器:

可用的property验证规则如下

验证规则说明
<validator name="boolean" />

Property值必须为truefalse

<validator name="choice"choice="trace, debug, info, warn, error" />

Property值必须为choice所定义的值之一。

<validator name="email" />

Property值必须为合法的email格式。

<validator name="fileExist"[file="WEB-INF/web.xml"] />

Property值必须为某个存在的文件或目录。

如果指定了file,那就意味着property值所指的目录下,必须存在file所指的文件或子目录。

<validator name="hostExist" />

Property值必须为合法的IP地址,或者可以解析得到的域名。

<validator name="keyword" />

Property值必须为字母、数字、下划线的组合。

<validator name="number" />

Property值必须为数字的组合。

<validator name="regexp"regexp="..."[mode="exact|prefix|contain"] />

Property值必须符合regexp所指的正则表达式。

其中,mode为匹配的方法:

  • 完全匹配exact

  • 前缀匹配prefix

  • 包含contain

如未指定mode,默认mode为contain。

<validator name="url"[checkHostExist="false"][protocols="http, https"][endsWithSlash="true"] />

Property值必须是合法URL。

假如指定了checkHostExist=true,那么还会检查域名或IP的正确性;

假如指定了protocols,那么URL的协议必须为其中之一;

假如指定了endsWithSlash=true,那么URL必须以/结尾。

生成配置文件的指令

描述文件中,每个<generate>标签指定了一个包含placeholders的配置文件模板,具体格式为:

生成配置文件的指令:

<generatetemplate="..."[destfile="..."][charset="..."][outputCharset="..."]
>

下面是参数的说明:

生成配置文件的指令参数:

参数名说明
template

需要配置的模板名。

模板名为相对路径,相对于当前jar/war/ear包的根目录。

destfile(可选

目标文件。

如不指定,表示目标文件和模板文件名相同,但是默认生成路径为包下的根目录,即Base URL目录

charset(可选)

模板的字符集编码。

XML文件不需要指定charset,因为AutoConfig可以自动取得XML文件的字符集编码;

对其它文件必须指定charset。

outputCharset(可选)

目标文件的输出字符集编码。

如不指定,表示和模板charset相同。

-------------------------------------------------------------------------------------------------------------
建立模板文件:
在auto-config.xml中定义了模板的位置后,把模板文件放在指定的位置。

AutoConfig的寻找模板的逻辑是:

  • 如果在auto-config.xml所在的目录下发现模板文件,就使用它;

  • 否则在包的根目录中查找模板文件;如果两处均未找到,则报错

书写模板是很简单的事,你只要:

  • 把需要配置的点替换成placeholder:“${property.name}”。当然,你得确保property.name被定义在auto-config.xml中。

  • 假如模板中包含不希望被替换的运行时的placeholder“${...}”,需要更改成“${D}{...}

此外,AutoConfig模板其实是由Velocity模板引擎来渲染的。因此,所有的placeholder必须能够通过velocity的语法。

使用不符合velocity语法的placeholders

例如,下面的placeholder被velocity看作非法:

${my.property.2}

解决的办法是,改写成如下样式:

${my_property_2}
----------------------------------------------------------------------------------------------------------

Autoconfig工具的使用

最简单的AutoConfig命令

autoconfig petstore.war        无论petstore.war是一个zip包还是目录,AutoConfig都会正确地生成其中的配置文件

AutoConfig会生成一个日志文件,就在auto-config.xml所在的目录下,名字为:auto-config.xml.log

默认情况下,AutoConfig会按下列顺序查找user properties:

  1. 当前目录 ./antx.properties

  2. 当前用户HOME目录/antx.properties

你可以指定一个自己的properties文件,用下面的命令:

   autoconfig ... –u my.props

你可以指定另一个输出文件或目录,这样,原来的文件或目录就不会被修改:

   autoconfig petstore.war –o petstore-configured.war

一般不需要特别指定charset,除非AutoConfig自动识别系统编码出错,导致显示乱码。运行AutoConfig独立可执行程序
autoconfig ... -c GBK

如果auto-config.xml描述文件中已定义了该”Property name“,而antx.properties文件中未指定相应”Property name“值,
则执行autoconfig时会提示
如下图所示要求更新antx.properties配置文件内容。选择使用默认值或是手动更新指定值,使用默认值的话逐项选择Next后再选Yes保存即可。




假如发现模板中某个placeholder,并未在auto-config.xml中定义,就会出现以下错误:



摘自http://webx.taobao.org/docs/autoconfig.html 

转载于:https://www.cnblogs.com/wjoyxt/p/3853627.html

相关文章:

Spark2 ML 学习札记

摘要&#xff1a;  1.pipeline 模式 1.1相关概念 1.2代码示例  2.特征提取&#xff0c;转换以及特征选择 2.1特征提取 2.2特征转换 2.3特征选择 3.模型选择与参数选择 3.1 交叉验证 3.2 训练集-测试集 切分 4.spark新增SparkSession与DataSet 内容&#xff1a; 1.pipeline …

xCode 开发快捷键

Ctrl CMD 右箭头返回上一个编辑的界面Ctrl CMD 左箭头返回后一个编辑的界面CMD Option 左箭头区域代码折叠CMD Option 右箭头区域代码展开Shift CMD Option 左箭头折叠界面内所有的代码Shift CMD Option 右箭头展开界面内所有的代码CMD Ctrl 上下箭头.h 和 .m …

javascript模块_JavaScript模块第2部分:模块捆绑

javascript模块by Preethi Kasireddy通过Preethi Kasireddy JavaScript模块第2部分&#xff1a;模块捆绑 (JavaScript Modules Part 2: Module Bundling) In Part I of this post, I talked about what modules are, why developers use them, and the various ways to incorp…

idea上实现github代码同步

1.先将github远程仓库clone到本地 2.将本地仓库中的项目导入到idea中 3.如果你的项目代码不是放在仓库的根目录下&#xff0c;idea会识别到你的项目是在git仓库目录下&#xff0c;必须点击add root才能匹配路径。 4.add root后会发现右击项目时会多了一个git选项 5.在git选项中…

iOS12 UITabbar Item 向上漂移错位的bug

[[UITabBar appearance] setTranslucent:NO]; 加此行代码 完美解决此bug

jQuery学习笔记(一)

补充一些自己容易忘的知识点: event.stopPropagation() 阻止事件冒泡 event.preventDefault() 阻止事件的默认行为 return false 相当于event.stopPropagation() event.preventDefault() 。除了阻止默认行为之外&#xff0c;还会阻止事件冒泡。 转载于:https://www.cnblogs.…

随机网络构建_构建随机报价机

随机网络构建by Ayo Isaiah通过Ayo Isaiah 构建随机报价机 (Building a Random Quote Machine) I really wasn’t entirely satisfied with my first attempt at building a Random Quote Generator on Free Code Camp. It was ugly, and the quotes were too long, so I didn…

20145231 《信息安全系统设计基础》第11周学习总结

20145231《信息安全系统设计基础》第11周学习总结 教材学习内容总结 异常 异常是异常控制流的一种形式&#xff0c;由硬件和操作系统实现。简单来说&#xff0c;就是控制流中的突变。 出现异常的处理方式&#xff1a; 1.处理器检测到有异常发生 2.通过异常表&#xff0c;进行间…

JAR命令使用

jar 命令详解 jar 是随 JDK 安装的&#xff0c;在 JDK 安装目录下的 bin 目录中&#xff0c;Windows 下文件名为 jar.exe&#xff0c;Linux 下文件名为 jar。它的运行需要用到 JDK 安装目录下 lib 目录中的 tools.jar 文件。不过我们除了安装 JDK 什么也不需要做&#xff0c;因…

捍卫者usb管理控制系统_捍卫超模块化JavaScript

捍卫者usb管理控制系统by Mike Groseclose通过Mike Groseclose 捍卫超模块化JavaScript (In Defense of Hyper Modular JavaScript) Last week npmgate was a big topic for the JavaScript community. For those of you who haven’t been following what happened, here’s …

Android开发——布局性能优化的一些技巧(一)

0. 前言上一篇我们分析了为什么LinearLayout会比RelativeLayout性能更高&#xff0c;意义在于分析了这两种布局的实现源码&#xff0c;算是对一个小结论的证明过程&#xff0c;但是对布局性能的优化效果&#xff0c;对这两种布局的选择远不如减少布局层级、避免过分绘制、按需加…

1-RAC基础

1 安装 pod ‘ReactiveObjC’ RAC 其实大大减少了代码量 2 基本使用 // 0 RAC 中最为常见的类 信号类/*RACSignal&#xff1a;信号类1.通过RACSignal 创建1个信号&#xff08;默认&#xff1a;冷信号&#xff09;2.通过订阅者&#xff0c;订阅信号信号&#xff08;变成:热信号…

static用法总结

C的static有两种用法&#xff1a;面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数&#xff0c;不涉及类&#xff1b;后者主要说明static在类中的作用。 一、面向过程设计中的static1、静态全局变量2、静态局部变量3、静态函数二、面向对象的…

小程序 缩放_缩放流星应用程序的初体验

小程序 缩放by Elie Steinbock埃莉斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor App) I recently went through the challenge and ordeal of having to scale my Meteor app. It’s a project that had already been running in …

SQL Server Lock Escalation - 锁升级

Articles Locking in Microsoft SQL Server (Part 12 – Lock Escalation) http://dba.stackexchange.com/questions/12864/what-is-lock-escalation 2008 R2 Lock Escalation (Database Engine)---Forward from Locking in Microsoft SQL Server (Part 12 – Lock Escalation)…

Jzzhu and Chocolate

CF#257 div2 C:http://codeforces.com/contest/450/problem/C 题意&#xff1a;n*m的方格&#xff0c;每次可以横着或者纵向的切一刀&#xff0c;问切k之后&#xff0c;最小的最大是多少。 题解&#xff1a;比赛的时候没有想到怎么处理&#xff0c;看了别人的题解&#xff0c;才…

2-RACommand

RACommand RACCommand 就是命令 // RACCommand 就是命令// 0 创建一个CMD 穿进去一个用于构建RACSignal的Block参数来初始化RACommandRACCommand *cmd [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {// 此处是cmd 执行的输入源NSLog(…

玻璃上的编码喜悦(+ 10史诗般的Epigrams)

by Den McHenry丹麦克亨利(Den McHenry) 玻璃上的编码喜悦( 10史诗般的Epigrams) (Perlis on Coding Joy ( 10 Epic Epigrams)) Alan J. Perlis was the first recipient of the Turing Award. He’s possibly most remembered today for his Epigrams on Programming, which …

【Android】Activity生命周期(亲测)

测试手机&#xff1a;Nexus 5 系统&#xff1a;4.4 一、测试 测试代码&#xff1a; 1 package com.example.androidalarm;2 3 import android.app.Activity;4 import android.content.Context;5 import android.content.res.Configuration;6 import android.os.Bundle;7 impo…

angularjs 学习笔记 简单基础

angularjs是谷歌公司的一个项目&#xff0c;弥补了hml在构建方面的不足&#xff0c;通过指令&#xff08;directive&#xff09;来扩展html标签&#xff0c;可以使开发者使用html来声明动态内容。 angularjs主要用来开发单页应用&#xff08;SPA&#xff09;为主的项目。 angul…

3-RACSignal 常用方法

RACSingal的常用方法 一 基本使用 1map // 0 创建信号提供者// RACSubject&#xff0c;既能发送信号&#xff0c;又能订阅信号// 多用于代理&#xff0c;相当于OC里的delegate或者回调blockRACSubject *subject [RACSubject subject];// 1 绑定信号RACSignal *bindSignal …

javascript迭代_探索JavaScript迭代

javascript迭代by Festus K. Yangani由Festus K.Yangani 探索JavaScript迭代 (Exploring JavaScript Iteration) Loops allow programs to perform repetitive tasks, such as iterating through an array, while adhering to the DRY principle (Don’t Repeat Yourself). Th…

4 RACMulticastConnection 连接类

# RACMulticastConnection信号被多次订阅如果一个信号多次被订阅&#xff0c;那么代码块代码会多次被执行。objective-c// 创建信号RACSignal *sg1 [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {NSLog("网络请求…

ie6下常见的bug 调整页面兼容性

ie6下常见的bug 我们布局页面&#xff0c;首先符合标准&#xff0c;如何写一个页面的标准性&#xff1f; 但是ie6等浏览器本身就比较特殊&#xff0c;bug比较多&#xff0c;兵法云&#xff0c;知己知彼百战百胜。我们需要了解ie6的一些常见bug&#xff0c;这样&#xff0c;更好…

Cacti安装详细步骤

Cacti安装详细步骤 前提LNMP或LAMP架构已搭建完成 一、cacti概述 1. cacti是用php语言实现的一个软件&#xff0c;它的主要功能是用snmp服务获取数据&#xff0c;然后用rrdtool储存和更新数据&#xff0c;当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此&#xff0…

为什么使用单页应用_为什么我讨厌您的单页应用

为什么使用单页应用by Stefan Tilkov斯蒂芬蒂尔科夫(Stefan Tilkov) 为什么我讨厌您的单页应用 (Why I hate your Single Page App) Okay, now that I have your attention, let me say that I don’t really hate your single page app. I just find it highly annoying, unl…

marquee实现文字移动效果;js+div实现文字无缝移动效果

1.marquee实现文字移动&#xff1a; <marquee width"220px;" scrollamount"5" onmouseover"this.stop()" onmouseout"this.start()" ><p style"letter-spacing:2px;width: 1px;">欢迎您登录拜博医疗口腔集团内部…

URAL 1203 Scientific Conference(贪心 || DP)

Scientific Conference 之前一直在刷计算几何&#xff0c;邀请赛连计算几何的毛都买见着&#xff0c;暑假这一段时间就做多校&#xff0c;补多校的题目&#xff0c;刷一下一直薄弱的DP。多校如果有计算几何一定要干掉-。- 题意&#xff1a;给你N个报告会的开始时间跟结束时间&a…

5- RAC 集合 RACTuple RACSequence

RAC 集合 RACTuple RACSequence // 0 RACTuple 就是一个数组/*RACTuple 就是一个数组*/RACTuple *tp1 [RACTuple tupleWithObjects:"5",5,1, nil];RACTuple *tp2 [RACTuple tupleWithObjectsFromArray:["11","22","33"]];NSLog(&quo…

测试开发人员与开发人员_如何升级为开发人员

测试开发人员与开发人员by Will Hughes威尔休斯(Will Hughes) 如何升级为开发人员 (How to Level up as a Developer) Being a productive developer is something you can learn through experience, books, or trial and error. But, one of the best ways to become a prod…