自动脚本工具 下载
下载工具后,解压,直接双击 "execute.bat" 文件后(前提已配置好 jdk 1.7 的环境),会生成文件夹 "output",该文件夹下会有生成的对应语言的脚本。
你也可以先尝试修改文件 “config_example.xml” 的配置项,再运行 "execute.bat",看 "output" 文件夹下的文件有什么变化,对于程序员来说应该是很简单的东西了。
新版本支持同步输出 as3(对象+宏), java(对象+宏), c#(对象+宏), mysql(对象), js(宏), lua(宏) 的脚本了。
工具主要目的就是输出不同目标语言下相同的数据对象类定义,和宏类定义。配置详细
[type] 支持的 type 类型 |---boolean : 布尔 |---integer8 : 8 位整型 |---integer16 : 16 位整型 |---integer32 : 32 位整型 |---integer64 : 64 位整型 |---decimal32 : 32 位小数 |---decimal64 : 64 位小数 |---string : 字符串 |---array : 数组,默认泛型类型为 object |---dictionary : 字典,默认泛型类型为 object |---date : 日期 |---object : 基类型 [value] 对应 type 类型支持的默认值 |---boolean : true/false 真/假 |---string : 非 null 时,输出会自动添加引号 |---date, array, dictionary : new 构造对象 |---object : null 空值 [Macros][group] |---宏的分组,当不指定宏类型时,则被系统归为分组中,自动指定类型为 integer32,指定一个系统值 |---值结构为 0x7FFFFFFF,从左到右,第0位始终为0,第1-11位表示所在的组,第12-31表示宏值。如 宏 0x00100001 表示该宏在分组 1 (第 1-11 位 : 0x001) 中,值为 1 (第 12-31 位 : 0x00001) |---分组不能嵌套 [AutoScript] 以包为单位定义对象和宏 |---package : 默认包路径 - 非必需 |---packageAs3 : as3 包路径,如果未指定,则使用 package - 非必需 |---packageJava : java 包路径,如果未指定,则使用 package - 非必需 |---packageNet : c# 包路径,如果未指定,则使用 package - 非必需 |---packageDB : mysql 数据库名,如果未指定,则使用 package 的最内层包名,如果也未指定,则系统默认为 dbScript - 非必需 |---packageJS : js 包路径,如果未指定,则使用 package - 非必需 |---packageLua : lua 包路径,如果未指定,则使用 package - 非必需 |---[Object] 对象数据 |---name : 对象数据类名(即文件名), - 必需 |---extend : 基类 - 非必需 |---note : 对象数据注释 - 非必需 |---nameTable : 该对象数据对应的 mysql 表名,如果未指定,则使用 name - 非必需 |---autoIncrement : mysql 中主键自增起始值 - 非必需 |---[ImportAs3][ImportJava][ImportNet] 对象数据需要引用的其它对象 |---value : 引用的对象完整包路径+类名,如 java.util.Date - 必需 |---[Property] 对象数据属性 |---name : 属性名,c# 输出时会首字母大写 - 必需 |---type : 属性默认类型,指定类型见 [type],如果指定为不支持的类型,则原样输出 - 非必需 |---value : 属性默认值,特殊值见 [value],其它值则会原样输出 - 非必需 |---note : 属性注释 - 非必需 |---typeAs3 : as3 属性类型(原样输出类型和指定的值),如果未指定,则使用 type - 非必需 |---valueAs3 : as3 属性围住值,如果未指定,则使用 value - 非必需 |---typeJava : java 属性类型(原样输出类型和指定的值),如果未指定,则使用 type - 非必需 |---valueJava : java 属性默认值,如果未指定,则使用 value - 非必需 |---typeNet : c# 属性类型(原样输出类型和指定的值),如果未指定,则使用 type - 非必需 |---valueNet : c# 属性默认值,如果未指定,则使用 value - 非必需 |---typeDB : mysql 字段类型(原样输出类型和指定的值),如果未指定,则使用 type - 非必需 |---valueDB : mysql 字段默认值,如果未指定,则使用 value - 非必需 |---restrictDB : mysql 字段约束,如 NOT NULL - 非必需 |---[Macros] 一组宏的定义,该定义下的直系 [Macro] 占用第 1 个分组 |---name : 宏类名(即文件名) - 必需 |---groupStart : 指定分组的起始序号,最小值为 0 |---groupEnd : 指定分组的结束序号,如果小于 groupStart,则默认为 0x7FF |---note : 宏类注释 - 非必需 |---[Macro] 宏 |---name : 宏名 - 必需 |---type : 宏类型,指定类型见 [type],如果指定为不支持的类型,则原样输出 - 非必需 |---value : 宏默认值,特殊值见 [value],其它值则会原样输出 - 非必需 |---note : 宏注释 |---[Group] 宏分组,同 [Macro] 定义一样会生成一个宏,如果不指定类型,则系统指定的值结构为:分组位为当前分组,值部分为0 |---name : 分组(宏)名 |---type : 分组(宏)类型,指定类型见 [type],如果指定为不支持的类型,则原样输出 - 非必需 |---value : 分组(宏)默认值,特殊值见 [value],其它值则会原样输出 - 非必需 |---note : 分组(宏)注释 |---[Macro] 分组中的宏
配置模板
1 <AutoScript package="" packageAs3="" packageJava="" packageNet="" packageDB="" packageJS="" packageLua=""> 2 3 <Object name="" extend="" note="" nameTable="" autoIncrement=""> 4 <ImportAs3 value=""/> 5 <ImportJava value=""/> 6 <ImportNet value=""/> 7 <Property name="" type="" value="" note="" typeAs3="" valueAs3="" typeJava="" valueJava="" typeNet="" valueNet="" typeDB="" valueDB="" restrictDB=""/> 8 </Object> 9 10 <Macros name="" groupStart="" groupEnd="" note=""> 11 <Macro name="" type="" value="" note=""/> 12 <Group name="" type="" value="" note=""> 13 <Macro name="" type="" value="" note=""/> 14 </Group> 15 </Macros> 16 17 </AutoScript>
批文件模板
1 @echo off 2 3 java -classpath ./libs/*; AutoScript ^ 4 -config ./config_example.xml ^ 5 -pathAs3 ./output/as3/ ^ 6 -pathJava ./output/java/ ^ 7 -pathNet ./output/net/ ^ 8 -net2one netLib ^ 9 -pathDB ./output/mysql/ ^ 10 -pathJS ./output/js/ ^ 11 -pathLua ./output/lua/ 12 13 pause 14 15 @echo on 16 exit 17 18 19 ::输出配置文件中的对象数据和宏 20 ::-config 后可以指定多个配置文件,如 -config config_a.xml config_b.xml 21 ::-pathAs3 输出 as3 文件路径(如果需要输出 as3 脚本) 22 ::-pathJava 输出 java 文件路径(如果需要输出 java 脚本) 23 ::-pathNet 输出 c# 文件路径(如果需要输出 c# 脚本) 24 ::-net2one 如果指定的话,将会把每一个配置文件(如 config_a.xml)里的所有对象(节点 Object)输出到一个 .cs 文件中 。后接 .cs 文件名(数量与 -config 指定的文件数量一一对应),如 -config ./configA.xml ./configB.xml -net2one a b,将会输出 a.cs 和 b.cs 文件 25 ::-pathDB 输出 mysql 脚本文件路径(如果需要输出 mysql 脚本) 26 ::-pathJS 输出 js 文件路径(如果需要输出 js 脚本) 27 ::-pathLua 输出 lua 文件路径(如果需要输出 lua 脚本)
比如:客户端与服务端需要统一请求和返回命令、错误码之类的,就可以只需要维护宏定义配置文件。直接输出客户端和服务端的宏定义类。
1 <Macros name="ReqRsp" groupStart="1" groupEnd="100" note="请求返回命令"> 2 <Macro name="WELCOME" type="string" value="欢迎使用"/> 3 <Macro name="ERROR_PASSWORD" type="integer32" value="1" note="密码错误"/> 4 5 <Group name="Register" note="注册"> 6 <Macro name="register_req" note="注册账号请求"/> 7 <Macro name="register_rsp" note="注册请求返回"/> 8 </Group> 9 </Macros> 10 <Macros name="Errors" groupStart="101" groupEnd="200" note="错误码"> 11 <Macro name="WELCOME" type="string" value="欢迎使用"/> 12 <Macro name="ERROR_PASSWORD" type="integer32" value="1" note="密码错误"/> 13 14 <Group name="Register" note="注册"> 15 <Macro name="username_existed" note="登录名已存在"/> 16 <Macro name="email_necessary" note="需要填写电子邮箱"/> 17 </Group> 18 </Macros>配置宏示例
1 package com.test 2 { 3 4 /** 请求返回命令 */ 5 public class ReqRsp 6 { 7 8 static public const WELCOME:String = "欢迎使用"; 9 /** 密码错误 */ 10 static public const ERROR_PASSWORD:int = 1; 11 12 /** 注册 */ 13 static public const REGISTER:int = 2097152; 14 /** 注册账号请求 */ 15 static public const REGISTER_REQ:int = 2097153; 16 /** 注册请求返回 */ 17 static public const REGISTER_RSP:int = 2097154; 18 19 } 20 }输出 as3 ReqRsp
1 package com.test 2 { 3 4 /** 错误码 */ 5 public class Errors 6 { 7 8 static public const WELCOME:String = "欢迎使用"; 9 /** 密码错误 */ 10 static public const ERROR_PASSWORD:int = 1; 11 12 /** 注册 */ 13 static public const REGISTER:int = 106954752; 14 /** 登录名已存在 */ 15 static public const USERNAME_EXISTED:int = 106954753; 16 /** 需要填写电子邮箱 */ 17 static public const EMAIL_NECESSARY:int = 106954754; 18 19 } 20 }输出 as3 Errors
1 package com.test; 2 3 /** 请求返回命令 */ 4 public class ReqRsp { 5 6 static public final String WELCOME = "欢迎使用"; 7 /** 密码错误 */ 8 static public final int ERROR_PASSWORD = 1; 9 10 /** 注册 */ 11 static public final int REGISTER = 2097152; 12 /** 注册账号请求 */ 13 static public final int REGISTER_REQ = 2097153; 14 /** 注册请求返回 */ 15 static public final int REGISTER_RSP = 2097154; 16 17 }输出 java ReqRsp
1 package com.test; 2 3 /** 错误码 */ 4 public class Errors { 5 6 static public final String WELCOME = "欢迎使用"; 7 /** 密码错误 */ 8 static public final int ERROR_PASSWORD = 1; 9 10 /** 注册 */ 11 static public final int REGISTER = 106954752; 12 /** 登录名已存在 */ 13 static public final int USERNAME_EXISTED = 106954753; 14 /** 需要填写电子邮箱 */ 15 static public final int EMAIL_NECESSARY = 106954754; 16 17 }输出 java Errors
1 namespace com.test 2 { 3 /// <summary> 4 /// 请求返回命令 5 /// </summary> 6 public class ReqRsp 7 { 8 9 public const System.String WELCOME = "欢迎使用"; 10 /// <summary> 11 /// 密码错误 12 /// </summary> 13 public const System.Int32 ERROR_PASSWORD = 1; 14 15 /// <summary> 16 /// 注册 17 /// </summary> 18 public const System.Int32 REGISTER = 2097152; 19 /// <summary> 20 /// 注册账号请求 21 /// </summary> 22 public const System.Int32 REGISTER_REQ = 2097153; 23 /// <summary> 24 /// 注册请求返回 25 /// </summary> 26 public const System.Int32 REGISTER_RSP = 2097154; 27 28 } 29 }输出 c# ReqRsp
1 namespace com.test 2 { 3 /// <summary> 4 /// 错误码 5 /// </summary> 6 public class Errors 7 { 8 9 public const System.String WELCOME = "欢迎使用"; 10 /// <summary> 11 /// 密码错误 12 /// </summary> 13 public const System.Int32 ERROR_PASSWORD = 1; 14 15 /// <summary> 16 /// 注册 17 /// </summary> 18 public const System.Int32 REGISTER = 106954752; 19 /// <summary> 20 /// 登录名已存在 21 /// </summary> 22 public const System.Int32 USERNAME_EXISTED = 106954753; 23 /// <summary> 24 /// 需要填写电子邮箱 25 /// </summary> 26 public const System.Int32 EMAIL_NECESSARY = 106954754; 27 28 } 29 }输出 c# Errors
1 var com_test_ReqRsp = { 2 3 "WELCOME" : "欢迎使用", 4 "ERROR_PASSWORD" : 1, // 密码错误 5 6 "REGISTER" : 2097152, // 注册 7 "REGISTER_REQ" : 2097153, // 注册账号请求 8 "REGISTER_RSP" : 2097154, // 注册请求返回 9 10 };输出 js ReqRsp
1 var com_test_Errors = { 2 3 "WELCOME" : "欢迎使用", 4 "ERROR_PASSWORD" : 1, // 密码错误 5 6 "REGISTER" : 106954752, // 注册 7 "USERNAME_EXISTED" : 106954753, // 登录名已存在 8 "EMAIL_NECESSARY" : 106954754, // 需要填写电子邮箱 9 10 };输出 js Errors
1 com_test_ReqRsp = { 2 3 ["WELCOME"] = "欢迎使用", 4 ["ERROR_PASSWORD"] = 1, -- 密码错误 5 6 ["REGISTER"] = 2097152, -- 注册 7 ["REGISTER_REQ"] = 2097153, -- 注册账号请求 8 ["REGISTER_RSP"] = 2097154, -- 注册请求返回 9 10 };输出 lua ReqRsp
1 com_test_ReqRsp = { 2 3 ["WELCOME"] = "欢迎使用", 4 ["ERROR_PASSWORD"] = 1, -- 密码错误 5 6 ["REGISTER"] = 2097152, -- 注册 7 ["REGISTER_REQ"] = 2097153, -- 注册账号请求 8 ["REGISTER_RSP"] = 2097154, -- 注册请求返回 9 10 };输出 lua Errors
比如数据传输,像 as3 与 java 通信的 amf3 协议,可以传输对象。配置如下
1 <Object name="VOUser" note="用户对象" nameTable="t_user"> 2 <Property name="id" type="integer32" note="标识" restrictDB="PRIMARY KEY"/> 3 <Property name="isBoy" type="boolean" value="true"/> 4 <Property name="dateTime" type="date" value="new"/> 5 </Object>配置对象类示例
1 package com.test 2 { 3 /** 用户对象 */ 4 public class VOUser 5 { 6 7 //============================================================================ 8 //PROPERTY 9 //============================================================================ 10 private var _id:int; 11 private var _isBoy:Boolean = true; 12 private var _dateTime:Date = new Date(); 13 //============================================================================ 14 //CONSTRUCTOR 15 //============================================================================ 16 public function VOUser() {} 17 //============================================================================ 18 //GETTER_SETTER 19 //============================================================================ 20 /** 标识 */ 21 public function get id():int { return _id; } 22 /** @private */ 23 public function set id(value:int):void { this._id = value; } 24 25 public function get isBoy():Boolean { return _isBoy; } 26 public function set isBoy(value:Boolean):void { this._isBoy = value; } 27 28 public function get dateTime():Date { return _dateTime; } 29 public function set dateTime(value:Date):void { this._dateTime = value; } 30 31 } 32 }输出 as3 VOUser
1 package com.test; 2 3 /** 用户对象 */ 4 public class VOUser { 5 6 //============================================================================ 7 //PROPERTY 8 //============================================================================ 9 private int id; 10 private boolean isBoy = true; 11 private java.util.Date dateTime = new java.util.Date(); 12 //============================================================================ 13 //CONSTRUCTOR 14 //============================================================================ 15 public VOUser() {} 16 //============================================================================ 17 //GETTER_SETTER 18 //============================================================================ 19 /** 标识 */ 20 public int getId() { return id; } 21 /** 标识 */ 22 public void setId(int value) { this.id = value; } 23 24 public boolean getIsBoy() { return isBoy; } 25 public void setIsBoy(boolean value) { this.isBoy = value; } 26 27 public java.util.Date getDateTime() { return dateTime; } 28 public void setDateTime(java.util.Date value) { this.dateTime = value; } 29 30 }输出 java VOUser
1 namespace com.test 2 { 3 /// <summary> 4 /// 用户对象 5 /// </summary> 6 public class VOUser 7 { 8 //============================================================================ 9 //PROPERTY 10 //============================================================================ 11 private System.Int32 _id; 12 private System.Boolean _isBoy = true; 13 private System.DateTime _dateTime = System.DateTime.Now; 14 //============================================================================ 15 //CONSTRUCTOR 16 //============================================================================ 17 public VOUser() {} 18 //============================================================================ 19 //GETTER_SETTER 20 //============================================================================ 21 /// <summary> 22 /// 标识 23 /// </summary> 24 public System.Int32 Id 25 { 26 get { return _id; } 27 set { this._id = value; } 28 } 29 30 public System.Boolean IsBoy 31 { 32 get { return _isBoy; } 33 set { this._isBoy = value; } 34 } 35 36 public System.DateTime DateTime 37 { 38 get { return _dateTime; } 39 set { this._dateTime = value; } 40 } 41 42 } 43 }输出 c# VOUser
1 DROP DATABASE IF EXISTS db_test; 2 CREATE DATABASE db_test DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI; 3 4 USE db_test; 5 6 #---------------------------------------------------------------------------- 7 #用户对象 8 DROP TABLE IF EXISTS t_user; 9 CREATE TABLE t_user( 10 id INT PRIMARY KEY COMMENT "标识" 11 , isBoy TINYINT DEFAULT 1 12 , dateTime DATETIME DEFAULT NULL 13 )DEFAULT CHARSET = UTF8 COLLATE UTF8_GENERAL_CI; 14 DESC t_user;输出 mysql 脚本