130 Star 1K Fork 350

GVPcanonical-entropy/nop-entropy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
.github/workflows
.knosys
.mvn/wrapper
.promptx/resource
.workflow
build-tools
config
demo
deploy
docs-en
docs
.meta
arch
compare
demo
dev-guide
ai
auth
batch
biz
boot
cluster
command
debug
delta
graalvm
graphql
ide
integration
ioc
job
message
microservice
model
nocode
orm
plugin
recipe
record
report
rule
security
sonar
spring
stream
vfs
workflow
xlang
xui
autotest.md
cli.md
codegen.md
config.md
customization.md
debug.md
delta-loader.md
dict.md
error-code.md
i18n.md
index.md
integration.md
intro.md
ioc.md
model-dump.png
optimize.md
quarkus.md
spring.md
tenant.md
faq
frontend
gpt
intro
performance
ppt
ref
theory
tutorial
user-guide
build-pdf.sh
core-code-guidance.md
index.md
nop-intro.md
why-nop.md
nop-ai
nop-all-for-spring
nop-antlr4
nop-api-core
nop-api-debugger
nop-auth
nop-autotest
nop-batch
nop-benchmark
nop-biz-report
nop-biz
nop-bom
nop-boot
nop-cdc
nop-cli-core
nop-cli-jdk11
nop-cli
nop-cluster
nop-codec
nop-codegen
nop-commons-java21
nop-commons
nop-config
nop-converter
nop-core
nop-css
nop-dao
nop-dataset
nop-datav
nop-dbtool
nop-demo
nop-dependencies
nop-dev
nop-dyn
nop-excel
nop-file
nop-fsm
nop-gateway
nop-git
nop-graphql
nop-hazelcast
nop-http
nop-idea-plugin
nop-image
nop-integration
nop-ioc
nop-java-parser
nop-javac
nop-job
nop-js
nop-log
nop-markdown
nop-match
nop-maven
nop-mermaid
nop-message
nop-netty-ext
nop-netty
nop-nosql
nop-oauth
nop-ofbiz-migration
nop-ooxml
nop-orm-data
nop-orm-drivers
nop-orm-eql
nop-orm-geo
nop-orm-graphql
nop-orm-model
nop-orm-pdm
nop-orm
nop-pdf
nop-plugin
nop-quarkus
nop-record
nop-report-for-spring
nop-report
nop-router
nop-rpa
nop-rpc
nop-rule
nop-search
nop-security
nop-shell
nop-socket
nop-spring
nop-stream
nop-svg
nop-sys
nop-tablesaw
nop-task
nop-tcc
nop-tool
nop-ui
nop-vertx
nop-web-amis-editor
nop-web-page
nop-web-site
nop-web
nop-wf
nop-xdefs
nop-xlang-debugger
nop-xlang
scripts
tests
tools/playwright
.dockerignore
.editorconfig
.gitattributes
.gitignore
CHANGELOG.md
LICENSE
NOTICE.md
README.en.md
README.md
TODO.md
build.sh
gen-dependency-tree.sh
mvnw
mvnw.cmd
nop-logo.png
nop-logo.svg
package.json
pom.xml
wechat-group.png
wechat-public-account.jpg
xlang-logo.png
xlang-logo.svg
克隆/下载
cli.md 8.99 KB
一键复制 编辑 原始数据 按行查看 历史

NopCli命令行工具

逆向工程

可以通过JDBC连接数据库,获取数据库中的元数据生成Excel格式的数据模型定义。

java -jar nop-cli.jar reverse-db litemall -c=com.mysql.cj.jdbc.Driver --username=litemall --password=litemall123456 --jdbcUrl="jdbc:mysql://127.0.0.1:3306/litemall?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"

nop-cli的reverse-db命令需要传入参数【数据库模式名】,例如litemall,然后通过jdbcUrl等选项传入JDBC连接字符串等信息。

Usage: nop-cli reverse-db [-dhV] -c=<driverClassName> -j=<jdbcUrl>
                          [-o=<outputFile>] [-p=<password>] [-t=<table>]
                          -u=<username> <catalog>
对数据库进行逆向工程分析,生成Excel模型文件
      <catalog>             数据库模式名
  -c, --driverClass=<driverClassName>
                            JDBC驱动类
  -d, --dump                输出文件(缺省输出到命令行窗口中)
  -h, --help                Show this help message and exit.
  -j, --jdbcUrl=<jdbcUrl>   jdbc连接
  -o, --output=<outputFile> 输出文件(缺省输出到命令行窗口中)
  -p, --password=<password> 数据库密码
  -t, --table=<table>       数据库表模式,例如litemal%表示匹配litemall为前缀的表
  -u, --username=<username> 数据库用户名
  -V, --version             Print version information and exit.

代码生成

如果已经获得Excel数据模型,则可以使用nop-cli命令行工具的gen命令来生成初始工程代码

java -jar nop-cli.jar gen -t=/nop/templates/orm model/app-mall.orm.xlsx

具体生成的内容如下:

├─app-mall-api       对外暴露的接口定义和消息定义
├─app-mall-codegen   代码生成辅助工程,根据ORM模型更新当前工程代码
├─app-mall-dao       数据库实体定义和ORM模型
├─app-mall-service   GraphQL服务实现
├─app-mall-web       AMIS页面文件以及View模型定义
├─app-mall-app       测试使用的打包工程
├─deploy             根据Excel模型生成的数据库建表语句

只生成dao模块

如果只想使用NopORM,不需要生成前端代码,也不需要生成GraphQL服务,则可以使用orm-dao模板

java -jar nop-cli.jar gen -t=/nop/templates/orm-dao -o=app-dao model/app-mall.orm.xlsx

使用自己定制的生成模板

除了使用Nop平台内置的代码生成模板,我们还可以建立自己的模板工程。具体过程参见项目bsin-codegen. B站视频: 可逆计算原理和Nop平台介绍及答疑, 从44分钟20秒开始


java -Xbootclasspath/a:bsin-codegen-template/src/main/resources/ -jar nop-cli-2.0.0-BETA.1.jar  gen bsin-demo/model/bsin-demo.orm.xlsx -t=/bsin/templates/orm -o=bsin-demo

通过-Xbootclasspath/a: bsin-codegen-template/src/main/resources/引入外部的jar包或者目录到classpath中,然后通过-t=/bsin/templates/orm来引用classpath下的模板文件,就可以生成代码

动态监听文件目录,发现修改后执行代码生成

使用NopCli工具可以监听指定目录,当目录下的文件发生变动时自动执行脚本代码。

java -jar nop-cli.jar watch app-meta -e=taks/gen-web.xrun

以上配置表示监控 app-meta目录,当其中的文件发生变化时执行gen-web.xrun脚本文件

在这个脚本文件中,我们可以通过GenWithDependsCache等Xpl模板标签来动态生成代码


<c:unit xmlns:c="c" xmlns:run="run" xmlns:xpl="xpl">
  <run:GenWithCache xpl:lib="/nop/codegen/xlib/run.xlib"
                    srcDir="/meta/test" appName="Test"
                    targetDir="./target/gen"
                    tplDir="/nop/test/meta-web"/>
</c:unit>

GenWithCache标签会设置srcDir,appName属性,然后执行tplDir指定的代码生成模板,生成文件的存放路径由targetDir指定。

代码生成的过程中启用了依赖追踪,第一次生成之后再此触发gen-web.xrun运行代码生成任务时会自动检查输出文件所对应的依赖模型文件,只有当依赖文件发生变化时才会重新生成,否则会自动跳过。

解析Excel模型导出为JSON或者XML

java -jar nop-cli.jar extract test.orm.xlsx -o=my.orm.json

extract指令会识别文件的后缀名,选择注册到系统中的解析器进行解析,得到Json对象后再导出为JSON文件。如果存在对应的xdef元模型定义,也可以选择导出为XML格式

通过-o导出文件参数可以指定导出为xml或者json,比如 -o=my.orm.xml根据文件后缀名可以确定需要导出为xml格式。

根据JSON生成Excel文件

java -jar nop-cli.jar gen-file my.orm.json -t=/nop/orm/imp/orm.imp.xml

gen-file会根据-t参数指定的模板文件来导出Excel。模板文件可以如果是imp.xml,则使用导入模型关联的导出模板来导出。也可以是xpt.xlsx这种报表模板, 此时将按照报表模型实现导出。JSON文件解析得到的对象在报表导出时对应于名为entity的对象。

执行报表文件并导出

通过gen-file指令,给定-t为报表模板文件

java -jar nop-cli.jar gen-file data.json -t=/my/test.xpt.xlsx -o=target/test.xlsx

gen-file的第一个参数data.json会被解析为一个Map,然后传入报表模板作为参数entity。通过-o参数可以指定导出文件位置和导出类型

执行逻辑编排任务

java -jar nop-cli.jar run-task my.task.xml -if=inputs.json

读取inputs.json文件作为task的输入参数,运行my.task.xml逻辑编排模型。

重打包操作

java -jar nop-cli.jar repackage -i=app -o=my-tool.jar

repackage指令将根据输入目录下的_vfs目录以及application.yamlbootstrap.yaml文件,把它们打包到当前nop-cli.jar 包中,输出一个新的可执行的jar包。

数据库导入导出

java -jar nop-cl.jar export-db test.export-db.xml -o=data

根据export-db.xml中的配置,将数据库中的数据导出到data目录下,可以选择导出为csv或者sql格式。导出时可以执行字段重命名,值的变换等操作。可以选择只导出部分字段。

java -jar nop-cl.jar import-db test.import-db.xml -i=data

从data目录下导入数据到指定数据库中,导入时可以按照keyFields去重,并可以选择是否允许更新,还是只允许插入。导入时可以进行字段重命名和值的变换。可以选择只导入部分字段。

可以通过指定-s参数来保存导入状态。

java -jar nop-cl.jar import-db test.import-db.xml -i=data -s=import-status.json

convert格式转换

在 DSL 模型的 XML/JSON/YAML/XLSX 格式间进行转换

命令格式

java -jar nop-cli.jar transform <inputFile>
    [-o|--output <outputFile>]

参数说明

参数 描述
<inputFile> 输入文件(必须指定明确的文件类型,比如app.orm.xml, app.orm.xlsx等)
-o, --output 输出文件(波希指定明确的文件类型)

具体实现是使用DocumentConvertManager。

  1. 通过convert.xml注册文件注册各种格式之间的转换逻辑
  2. register-model.xml中注册的DSL各种格式之间可以自动双向转换
  3. 如果注册了 A->B和B->C,则可以自动支持A->C的转换(仅支持一级推导)

使用示例

# XML → XLSX
java -jar nop-cli.jar convert app.orm.xml  -o app.orm.xlsx

# JSON → YAML
java -jar nop-cli.jar convert app.orm.json -o app.orm.yaml

根据page.yaml文件生成页面json文件

java -jar nop-cli.jar run scripts/render-pages.xrun -i="{moduleId:'app/demo'}" -o=target

run指令可以用于执行xpl脚本文件,render-pages.xrun脚本中调用PageProvider来生成页面json文件,-i参数指定输入参数,-o 参数指定输出目录。

<!-- render-pages.xrun文件的内容-->
<c:script>
  import io.nop.web.page.PageProvider;
  import java.io.File;

  const pageProvider = new PageProvider();
  const options = {
  moduleId: moduleId,
  resolveI18n: true,
  useResolver: true,
  threadCount: 4
  };

  pageProvider.renderPagesTo(options, outputDir);
</c:script>

renderPagesTo函数会遍历_vfs/{moduleId}/pages/*/*.page.yaml文件,并执行模板渲染。在page.yaml中可以通过<web:GenPage> 等标签来引入View模型。

常见问题

  1. 如何调整日志输出级别
java -Dquarkus.config.locations=application.yaml -jar nop-cli.jar gen-file my.orm.json -t=/nop/orm/imp/orm.imp.xml

缺省配置了quarkus.log.level=INFO,以及quarkus.log.category."io.nop".level=ERROR ,可以通过外部的application.yaml来覆盖缺省的quarkus配置。

  1. 如何使用外部的application.yaml配置文件

通过-Dnop.config.location=application.yaml参数指定外部配置文件

Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/canonical-entropy/nop-entropy.git
git@gitee.com:canonical-entropy/nop-entropy.git
canonical-entropy
nop-entropy
nop-entropy
master

搜索帮助