跳到主要内容
版本:Next

命令行工具

跨平台

得益于.net的跨平台能力,Luban可以在主流的Win、Linux及macOS操作系统上运行。

命令格式


dotnet <path_of_luban.dll> [args]

-s, --schemaCollector schema collector name

--conf Required. luban conf file

-t, --target Required. target name

-c, --codeTarget code target name

-d, --dataTarget data target name

-p, --pipeline pipeline name

-f, --forceLoadTableDatas force load table datas when not any dataTarget

-i, --includeTag include tag

-e, --excludeTag exclude tag

--variant field variants

-o, --outputTable output table

--timeZone time zone

--customTemplateDir custom template dirs

--validationFailAsError validation fail as error

-x, --xargs args like -x a=1 -x b=2

-l, --logConfig (Default: nlog.xml) nlog config file

-w, --watchDir watch dir and regererate when dir changes

-v, --verbose verbose

--help Display this help screen.

--version Display version information.
参数必选默认值描述
-s, --schemaCollectordefaultschema根收集器
--confluban配置项
-t, --target生成目标,取schema全局参数target中的一个
-c, --codeTarget生成的代码目标。可以有0-n个。如 -c cs-bin -c java-json
-d, --dataTarget生成的数据目标。可以有0-n个。如 -d bin -d json
-f, --forceLoadTableDatasfalse即使没有指定任何dataTarget也要强行加载配置数据,适用于在配置表提交前检查配置合法性
-p, --pipelinedefault生成管线。默认为内置的DefaultPipeline
-i, --includeTagtag为空或者为该tag的记录会被输出到数据目标,其他tag数据会被忽略。 --includeTag与--excludeTag不能同时存在
-e, --excludeTag包含该tag的记录不会被输出到数据目标。 --includeTag与--excludeTag不能同时存在
--variant指定使用的字段变体,格式为 --variant {variantKey}={variantName},其中{variantKey}{beanFullName}.{fieldName}(如 test.TestVariant.value)。 可以有多个--variant用于为不同的字段指定变体。详细文档见变量变体
-o, --outputTable指定要生成的table,可以有多个,例如-o item.tbItem -o bag.TbBag。如果未指定此参数,则按照group规则计算导出的table列表
--timeZone指定当前时区,默认取本地时区。此参数会影响datetime类型。该参数为linux或win下的时区名,例如 Asia/ShanghaiChina Standard Time
--customTemplateDir自定义template搜索路径,优先级搜索此路径,再搜索默认的Templates路径
--validationFailAsErrorfalse如果有任何校验器未通过,则生成失败。此参数一般在正式发布时使用
-x, --xargs指定一些特殊参数。具体需要哪些参数由生成管线运行过程中涉及的模块决定

SchemaCollector

Luban.SchemaCollector.Builtin项目实现了DefaultSchemaCollector,它支持与旧版本Luban相似的定义格式。该schemaCollector名为default。

Code Target

目前内置支持以下code target:

code target描述
cs-binC#,读取bin格式文件
cs-simple-jsonC#,使用SimpleJSON读取json文件,推荐用于Unity客户端
cs-dotnet-jsonC#,使用System.Text.Json库读取json文件,推荐用于dotnet core服务器
cs-newtonsoft-jsonC#,使用Newtonsoft.Json库读取json文件
cs-editor-jsonC#,读取与保存记录为单个json文件,适用于自定义编辑器保存与加载原始配置文件
cs-protobuf生成加载所有protobuf bin格式数据的代码,仅含Tables类
lua-lualua,读取lua格式的文件
lua-binlua,读取bin格式文件
java-binjava,读取bin格式文件
java-jsonjava,使用gson库读取json格式文件
cpp-bincpp,读取bin格式文件。自v2.3.0版本起移除
cpp-sharedptr-bincpp,使用智能指针保存动态分配的对象,读取bin格式文件
cpp-rawptr-bincpp,使用裸指针保存动态分配的对象,读取bin格式文件
go-bingo,读取bin格式文件
go-jsongo,读取json格式文件
python-jsonpython,读取json格式文件
gdscript-jsongdscript,读取json格式文件。注意,如果你使用C#语言开发,推荐使用更高效的cs-bin格式
typescript-bintypescript,读取json格式文件
typescript-jsontypescript,读取json格式文件
typescript-protobuftypescript,生成读取protobuf格式数据的代码,仅含Tables类
rust-bin生成rust代码,读取bin格式文件
rust-json生成rust代码,读取json格式文件
php-jsonphp,读取json格式文件
protobuf2生成proto2语法的schema文件
protobuf3生成proto3语法的schema文件
flatbuffers生成flatbuffers的schema文件
警告

code target必须与data target匹配,否则会加载失败。

一次生成多个code target时,必须为每个code target单独指定输出目录,否则会相互覆盖。实践中也不可能让不同的代码输出到同一个目录下。

Luban的大多数内置模板都使用了层级参数(Cascading Option)机制,你只需要用<code target name>.outputCodeDir参数 分别为每个target指定输出目录参数即可。

Data Target

内置支持以下 data target:

data target描述
binLuban独有的binary格式,紧凑、高效,推荐用于正式发布
bin-offset记录以bin格式导出的数据文件中每个记录的索引位置,可以用于以记录为粒度的lazy加载
jsonjson格式,map输出成[[key, value]]格式
json2与json格式类似,但map输出成{"key":"value"}格式
lualua格式
xmlxml格式
ymlyaml格式
bsonbson格式
msgpackmsgpack的二进制格式
protobuf2-binprotobuf2的二进制格式
protobuf3-binprotobuf3的二进制格式
protobuf2-jsonprotobuf2支持的json格式
protobuf3-jsonprotobuf3起支持的json格式
flatbuffers-jsonflatbuffers支持的json格式
text-list输出配置出现的所有text key,按从小到大排序

如果要一次输出多个target,解决办法与code target类似。只需要用<data target name>.outputDataDir参数 分别为每个target指定输出目录参数即可。

每个code target只能读取一种相匹配的数据格式。例如cs-bin生成的c#代码只能读取bin格式数据, java-json生成的java代码只能读取json格式。

Pipeline

Luban.Core中实现一个默认管线DefaultPipeline,名为default。使用者可以实现自己的Pipeline。

xargs

还有大量的命令行参数,由于它们是Pipeline中各个可定制模块独有的参数,因而这些参数没放到标准命令行参数中,统一用-x --xargs参数指令。

内置模块用到的参数有:

参数描述可用值示例
{codeTarget}.outputCodeDir代码目标的输出目录-x outputCodeDir=/my/output/dir
{dataTarget}.outputDataDir数据目标的输出目录-x outputDataDir=/my/output/dir
codeStyle代码目标的命名风格,内置实现的Code Target都会自动设置与目标语言相匹配的codeStyle,不需要显式指定none、csharp-default、java-default、go-default、lua-default、typescript-default、cpp-default、python-default-x codeStyle=csharp-default
namingConvention.{codeTarget}.{location}codeTarget为--codeTarget参数中指定的target名。location为风格位置,可选值为namespace、type、method、property、field、enumItem,详见代码风格。该参数为层级选项,如果不指定{codeTarget},则对所有target生效none、pascal、camel、upper、snake-x namingConvention.cs-bin.field=pascal
dataExporter数据导出器null、default-x dataExporter=default
codePostprocess代码后处理器,可以为多个未实现任何内置postprocess-x codePostProcess=a,b,c
dataPostprocess数据后处理器,可以为多个未实现任何内置postprocess-x dataPostProcess=a,b
outputSaver数据保存器,默认为local,即输出到本地目录,如果不想输出任何文件,可以用nullnull、local-x outputSaver=local
outputSaver.{codeTarget|dataTarget}.cleanUpOutputDir输出文件前是否清除outputCodeDir或者outputDataDir目录中多余的文件,默认为true-x outputSaver.cs-bin.cleanUpOutputDir=0
l10n.provider本地化文本Provider,如果未设置此参数则不进行任何本地化相关操作,包括text校验和静态转换default-x l10n.provider=default
l10n.textFile.path本地化文本数据文件,当设置了l10.provider时必填此值-x l10n.textFile.path=xxxx
l10n.textFile.keyFieldName本地化文本数据文件中数据项key字段的字段名-x l10n.textFile.keyFieldName=key
l10n.textFile.languageFieldName本地化文本数据文件中数据项对应语言的文本值字段的字段名-x l10n.languageFieldName=en
l10n.convertTextKeyToValue执行静态本地化,将key替换为对应语言的文本值-x l10n.convertTextKeyToValue=1
l10n.textListFile输出的配置中所有text key的列表的文件,配合 DataTarget text-list使用
pathValidator.rootDirpath校验器搜索文件所用的根目录-x pathValidator.rootDir=/xx/yy
{codedata}.lineEnding生成的代码和数据文件的行尾符。该选项只对文本类型的输出文件有效,对于二进制格式如bin、bson之类的格式无效可为CR、LF、CRLF,如果未指定则取Environment.NewLine为行尾符
json.compact是否输出紧凑无缩进的json数据,与json或json2 dataTarget配合使用,默认为00、1、true、false-x compact=1
{dataTarget}.fileExt输出数据文件的文件名后缀-x bin.fileExt=bin
{dataTarget}.outputDataExtension输出数据文件的文件名后缀。v2.12.0版本移除,改名为fileExt-x bin.outputDataExtension=bin
{codeTarget|dataTarget}.fileEncoding输出文件的字符编码-x lua.fileEncoding=gb2313

OutputSaver

最终生成的数据的保存器。当前实现了两个保存器local和null。

local将文件保存到本地目录。null则不执行任何操作。local是默认使用的保存器,一般生成任务使用local。对于只想校验配置表,不想生成任何数据,使用null 保存器可以达到这个目标。

示例

下面展示了一些常见的生成命令示例,更多示例请参考 luban_examples/Projects

unity + c# + bin

示例项目Csharp_Unity_bin


set WORKSPACE=..\..

set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\DataTables

dotnet %LUBAN_DLL% ^
-t all ^
-c cs-bin ^
-d bin ^
--conf %CONF_ROOT%\luban.conf ^
-x outputCodeDir=Assets/Gen ^
-x outputDataDir=..\GenerateDatas\bytes ^
-x pathValidator.rootDir=%WORKSPACE%\Projects\Csharp_Unity_bin ^
-x l10n.textProviderFile=*@%WORKSPACE%\DataTables\Datas\l10n\texts.json

unity + c# + json

示例项目Csharp_Unity_json


set WORKSPACE=..\..

set GEN_CLIENT=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\DataTables

dotnet %GEN_CLIENT% ^
-t all ^
-c cs-simple-json ^
-d json ^
--conf %CONF_ROOT%\luban.conf ^
-x outputCodeDir=Assets/Gen ^
-x outputDataDir=..\GenerateDatas\json ^
-x pathValidator.rootDir=D:\workspace2\luban_examples\Projects\Csharp_Unity_bin ^
-x l10n.textProviderFile=*@D:\workspace2\luban_examples\DataTables\Datas\l10n\texts.json


dotnet + c# + bin

示例项目Csharp_DotNet_bin

set WORKSPACE=..\..

set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\DataTables

dotnet %LUBAN_DLL% ^
-t all ^
-c cs-bin ^
-d bin ^
--conf %CONF_ROOT%\luban.conf ^
-x outputCodeDir=Gen ^
-x outputDataDir=..\GenerateDatas\bytes ^
-x pathValidator.rootDir=%WORKSPACE%\Projects\Csharp_Unity_bin ^
-x l10n.textProviderFile=*@%WORKSPACE%\DataTables\Datas\l10n\texts.json

go + bin

示例项目 Go_bin

set WORKSPACE=..\..

set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\DataTables

dotnet %LUBAN_DLL% ^
-t all ^
-c go-bin ^
-d bin ^
--conf %CONF_ROOT%\luban.conf ^
-x outputCodeDir=gen ^
-x outputDataDir=..\GenerateDatas\bytes ^
-x pathValidator.rootDir=%WORKSPACE%\Projects\Csharp_Unity_bin ^
-x l10n.textProviderFile=*@%WORKSPACE%\DataTables\Datas\l10n\texts.json ^
-x lubanGoModule=demo/luban

java + bin

示例项目 Java_bin

set WORKSPACE=..\..

set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\DataTables

dotnet %LUBAN_DLL% ^
-t all ^
-c java-bin ^
-d bin ^
--conf %CONF_ROOT%\luban.conf ^
-x outputCodeDir=src/main/gen ^
-x outputDataDir=..\GenerateDatas\bytes ^
-x pathValidator.rootDir=%WORKSPACE%\Projects\Csharp_Unity_bin ^
-x l10n.textProviderFile=*@%WORKSPACE%\DataTables\Datas\l10n\texts.json

用于策划检查配置,不生成任何代码和文件

示例项目 ConfigCheck

set WORKSPACE=..

set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\DataTables

dotnet %LUBAN_DLL% ^
-t all ^
--conf %CONF_ROOT%\luban.conf ^
-x pathValidator.rootDir=%WORKSPACE%\Projects\Csharp_Unity_bin ^
-x l10n.textProviderFile=*@%WORKSPACE%\DataTables\Datas\l10n\texts.json ^
-x forceLoadDatas=1

同时生成 cs-bin和java-bin代码


set WORKSPACE=..\..

set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\DataTables

dotnet %LUBAN_DLL% ^
-t all ^
-c cs-bin ^
-c java-bin ^
-d bin ^
--conf %CONF_ROOT%\luban.conf ^
-x cs-bin.outputCodeDir=cs_output_path ^
-x java-bin.outputCodeDir=java_output_path ^
-x outputDataDir=..\GenerateDatas\bytes ^
-x pathValidator.rootDir=%WORKSPACE%\Projects\Csharp_Unity_bin ^
-x l10n.textProviderFile=*@%WORKSPACE%\DataTables\Datas\l10n\texts.json