认识CUBA平台的CLI

毫无疑问,软件开发人员(尤其是Java开发人员)的世界充满了键盘狂热者,最好是一次单击即可键入10-15个字母。 而且我们的社区也不例外,因此经常有人问我们“如何在没有CUBA Studio的情况下启动项目?”之类的问题。 或“是否有轻量级的免费命令行替代CUBA Studio?”。 所以,大家好消息!

命令行界面

免费CLI是否可以代替商业CUBA Studio?

CLI不被视为CUBA Studio的替代品,它还有另一个使命。 CLI对于对Spring框架,JPA和CUBA基础结构有丰富经验的开发人员非常有用,并且(很重要!)在黑色窗口中使用灰色字母感到很舒服。 简而言之,cuba-cli是一个命令行实用程序,使您可以轻松地基于CUBA Platform创建项目。 此外,它提供了主要项目工件的轻量级支架:实体,屏幕,服务等。

命令行界面

同时Studio保持其利基地位,可让您轻松了解CUBA世界。 它提供了一个直观的用户界面,即使没有任何JPA或Spring或任何底层技术的经验,即使是CUBA的新手也可以在几分钟内设计出他们的第一个应用程序……实际上,您不需要编写任何代码即可进行开发标准的CRUD应用程序– Studio会为您完成。 对于从另一个生态系统迁移到CUBA的人们以及习惯于在IDE中获得终极舒适的人们,Studio也是一个绝佳的选择。

命令行界面

综上所述,CUBA Studio更多地是关于“边做边学”和巨大的“省时”,而CLI是为您编写强制性样板例程的主力军。

什么CLI可以?

显然,您必须先安装CLI。 它支持主要的操作系统,您可以在此处找到每个操作系统的安装指南。 安装后,只需在命令行中输入cuba-cli即可 ,就是这样–我们准备开始一个新项目或使用现有项目进行操作。 通过点击选项卡,您可以找到列出的所有受支持的命令。 选择或键入help命令,它将为您简要介绍每个命令。 让我们看看这些命令在后台的作用,以及它们如何节省开发人员的时间并延长键盘的使用寿命:

一般用途

  • help,version,exit,cd –这些命令显然不会影响您的源代码,并且从名称中可以清楚地理解它们的操作,所以让我们跳过它们:)。

项目设置和全局设置

  • create-app –指导完成新的CUBA项目所需的步骤:项目名称,名称空间,根软件包,平台版本和项目中使用的数据库。 该项目将包含全局(可从核心和Web模块访问),核心(用于业务逻辑的服务器端层)和Web(用于屏幕控制器和其他GUI逻辑的服务器端层)模块。
  • polymer –基于Google开发的Polymer库,将新客户端添加到您的应用程序中。 它通过添加新模块的配置和任务来修改settings.gradlebuild.gradle 。 它还会创建所需图像资源的文件,并为Polymer前端应用程序生成登录,菜单和其他有用的Web组件。
  • 主题 –在modules / web目录下创建一个特殊的文件夹结构,一些用于标记应用程序的图像(登录图标,菜单图标和favicon)以及一些scss文件,您可以在其中修改默认方案。 还将webThemesModule模块及其配置添加到settings.gradle和build.gradle文件中。 最后,此命令添加了deployThemes gradle任务,以便无需重新启动服务器即可查看更改。 文档的此部分提供有关此主题的详细信息。
  • add-component –将现有的应用程序组件插入您的应用程序。 它将新行添加到构建gradle的dependency块中,并修改Web模块的web.xml ,将应用程序组件的主包添加到appComponents上下文参数中。

领域建模

  • 实体 –为JPA实体及其DDL脚本生成存根。 此实体还将根据实体类型在persistence.xmlmetadata.xml中注册-不管它是否持久。 最后,CLI将生成一个消息包,以提供实体属性的本地化。
  • 枚举 –生成一个实现EnumClass接口的Enum,带有本地化消息的字段以及有用的fromId方法。

商业逻辑

  • 实体侦听器 –搭建实现Entity Listeners接口的Spring组件,并在相应的Entity类中声明它。 当实体更改状态时,此类侦听器将被钩住。 您可以在此处找到更多信息。
  • 服务 –搭建全局模块中的接口及其核心中的实现。 为了可从Web模块使用,它已在web-spring.xmlWebRemoteProxyBeanCreator bean定义中注册
  • bean –只需生成一个Spring组件,并节省大约150个字符的键入时间:)。
  • config –在具有指定源类型(系统,数据库或应用程序)的指定模块中为CUBA配置接口提供一个存根。 在文档的这一章中找到有关CUBA配置接口的更多信息。

用户界面

  • 屏幕 –搭建GUI屏幕。 该命令支持创建:
    –一个新的空白屏幕
    –扩展现有的 –浏览器–包含实体列表,其上的CRUD操作和过滤器的屏幕 –编辑器–用于创建或编辑单个实体的屏幕。

该命令使用其本地化消息包来支持xml屏幕描述符及其Java控制器。 也可以选择将屏幕添加到主菜单。

杂项

  • 应用程序组件 –将您的CUBA应用程序可嵌入(可插入)到另一个CUBA应用程序中。 在文档中找到有关应用程序组件概念的更多信息。 该命令生成app-component.xml文件,该文件定义了对其他组件的依赖关系,描述了现有的应用程序模块,生成的工件和公开的应用程序属性。 运行该命令时,它将提示您将当前模块前缀更改为唯一的前缀,以避免冲突。 如果更改前缀,它还将调整settings.gradlebuild.gradle文件。
  • update-script –创建一个SQL更新脚本文件,其位置和名称符合CUBA约定。 CUBA平台包括在应用程序启动时应用更新脚本的机制。 这些脚本应按照从旧到新的历史顺序执行。 为确保此类排序,更新脚本应放在modules / core / db / update / {USED DATABASE} / {yy} /目录下,并命名为{yyMMdd}-{INCREMENT}-{SCRIPT NAME} .sql
  • 自定义模板 –根据开发人员定义的速度模板生成项目文件。 模板机制允许声明性地扩展CLI命令集,而无需编译。 在此处找到有关CLI模板引擎的更多信息。

如您所见,CLI承担了大量工作,以保护开发人员免受无聊但不可避免的例行攻击。

可扩展性

首先,如前所述,CLI提供了一个模板引擎来扩展其命令集,而无需更改源并重新编译它。 CLI模板包括两部分:

  1. template.xml文件,以声明方式描述了自定义命令要询问的问题。
  2. 一组文件(xml,java或任何其他格式),其中包含Apache Velocity脚本,因此可以由Velocity模板引擎对其进行处理。 来自template.xml文件的问题的答案将作为参数传递,并且可以在Velocity脚本中访问。

该维基页面提供有关CLI模板的详细信息。

其次,CLI提供扩展点来加载自定义插件,并公开可在自定义插件中使用的公共事件。 使用这种机制,开发人员可以创建具有最大灵活性的新命令并扩展现有命令,例如,为screen命令添加其他选项,例如查找。 您可以在此处找到CLI插件的文档和开发指南。

最后,CUBA CLI是一个开源项目,其源代码发布在GitHub上 。 CUBA团队很高兴看到您的贡献(请参阅贡献指南 )以及您可能遇到的问题 。 因此,如果您看到一些常见但未发现的用例,请随时帮助社区并向我们发送您的请求!

结论

这只是我们CLI的起点,我们希望它将帮助您使开发过程更加流畅和快速,特别是如果您不使用CUBA Studio。 我们将进一步改善CLI,并已经在规划路线图– 在这里您可以看到我们要在第二版中发布的功能。

最后,我也想分享一条建议。 开始您的第一个CUBA项目时,对于平台的初始评估,CLI可能会变得过于繁重。 CUBA Studio提供30天的试用期 ,因此,如果您或您的同事不熟悉该框架,建议在初始阶段使用CUBA Studio并以交互方式发现平台功能。 由于试用期已结束,因此您可以决定是否要订阅并继续使用CUBA Studio或移至CLI。

最后,您可以在我们的YouTube频道上观看CLI演示视频。

PS哦,是的,几乎忘了说CLI是用Kotlin编写的。 这是我们第一次在生产中使用这种语言-到目前为止,一切都很好!

翻译自: https://www.javacodegeeks.com/2018/08/cli-cuba-platform.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将matlab中数据输出保存为txt或dat格式

一、将matlab中数据输出保存为txt或dat格式的三种方法。 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt为文件名,该文件存储于当前工作目录下,再打开就可以打开后,数据有可能是以…

马尔可夫链笔记

1 引言 之前学习了伯努利过程和泊松过程,它们是无记忆性,不依赖于过去的状态,今天学习了马尔可夫链,它会依赖于过去的过程,更准确的说是依赖于过去的某种状态。 2 离散时间的马尔可夫链(Markov Chain, MC…

「协方差」与「相关系数」的概念

一、协方差: 可以通俗的理解为:两个变量在变化过程中是同方向变化?还是反方向变化?同向或反向程度如何? 你变大,同时我也变大,说明两个变量是同向变化的,这时协方差就是正的。 你…

垃圾收集 java_关于Java垃圾收集

垃圾收集 java本文讨论的是使用的最流行的框架之一带来的开销–我敢打赌,几乎没有应用程序不使用java.util.Collections。 本文基于以下事实:框架为例如集合的初始大小提供了默认值。 因此,我们有一个假设,即大多数人不会费心地自…

Latex \bibliographystyle+修改字体字号的大小

1. bibliography style LaTeX 标准选项及其样式共有以下8种: plain ,按字母的顺序排列,比较次序为作者、年度和标题. unsrt ,样式同plain,只是按照引用的先后排序. alpha ,用作者名首字母年份后两位作标号…

boxplot

1. 简介 箱形图,又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。箱形图于1977年由美国著名统计学家约翰图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、上下四分位数及…

Java 11的期望

过去的几年对Java世界一直是动荡不安的,在相当多的发行版中添加了各种各样的功能。 在开发人员社区中,人们逐渐意识到Java的开发速度不够快。 在最初的20年中,Java平台和Java开发工具包(JDK)经历了庞大,不…

martingale与Markov Process的关系

鞅过程与马尔科夫过程是什么关系? 1.鞅代表的是公平游戏,马尔可夫过程侧重过程无记忆性 总而言之:鞅和马尔可夫过程没有包含的关系。因为鞅代表的是公平游戏,而马尔可夫过程侧重过程无记忆性。两者没有内在联系。 注&#xff1…

LaTeX双栏模板插入通栏公式(跨栏插图)

1. 利用带星号的浮动体环境 带星号的浮动体figure和table环境可以在双栏模板中使用,例如我们以IEEEtran为例,插入通栏公式 \documentclass{IEEEtran} \usepackage{amsmath,lipsum} \begin{document} \lipsum[1] \begin{figure*} \begin{ali…

renew process 更新过程

一个泊松过程可以分解成一系列 i.i.di.i.di.i.d 的指数分布随机变量相加,如果把指数分布换成其他 i.i.di.i.di.i.d 的分布就得到了更新过程。 更新过程本身是泊松过程的一种扩长,同时更新过程也可以发展出一套更新理论,包括更新方程等。 htt…

离散时间信号,连续时间信号,模拟信号,数字信号区别

连续时间信号 : 在时间t 上是连续的值 时间连续, 幅值连续。 定义为模拟信号。时间连续, 幅值离散。 比如脉冲信号。 离散时间信号 : 在时间t上 是离散的值 时间离散, 幅值连续。 (在任意两个离散时间点…

java8 javafx_Java8中的外观(JavaFX8)

java8 javafxJavaFX8在外观方面进行了一些更改 ,其中最相关的是新CSS API ,它允许您为控件以及已公开的Skin类创建新CSS属性和伪类。 使用CSS可以更改控件的很多外观,但是CSS可以实现很多功能,这就是Skin类的用处。从“ UI控件体…

如何通俗易懂地解释卷积?

马同学 从数学上讲,卷积就是一种运算。 某种运算,能被定义出来,至少有以下特征: 首先是抽象的、符号化的 其次,在生活、科研中,有着广泛的作用 比如加法: [公式] ,是抽象的&…

具有中央异常处理和VO验证的Spring Data JPA –框架

1.简介 一段时间以来,Spring框架已成为事实上的标准,可以创建任何基于REST API的应用程序。 Spring提供了各种现成的组件,以避免编写重复而繁琐的样板代码。 另外,关于Spring的美丽之处在于,如果有现成的解决方案&…

初识斯蒂尔杰斯积分(Stieltjes integral)

https://blog.csdn.net/Northernland/article/details/83051415

drools6.5_使用Drools 6.0进行部署

drools6.5KieScanner 6.0 KieScanner取代了5.x KnowledgeAgent。 它使用嵌入式Maven允许在运行时解析和检索jar。 6.0应用程序现在可以轻松支持依赖关系和可传递依赖关系; 使用众所周知的Maven语义进行版本控制。 它允许在类路径上部署,也可以在运行时动…

双子(Dioid)

双子代数是若其对任意无限多元的 “和”封闭且乘法对此无限和具分配律。 https://baike.baidu.com/item/%E5%8F%8C%E5%AD%90%E4%BB%A3%E6%95%B0

具有外部Zookeeper集成并使用SOLRJ API访问数据的SOLR cloud 7.4集群配置

SOLR是最流行且高度可扩展的搜索引擎之一,它基于分布式索引技术运行。 Solr索引几乎可以基于任何类型的数据源(CSV数据或XML数据或从RDBMS数据库或标准文件系统中提取的数据)构建。 对于以RDBMS数据库作为后端构建的任何Web应用程序&#xf…

随机过程及其稳态stability

1. 为什么要研究随机过程? 人类认识世界的历史,就是一认识和描绘各种运动的历史,从宏观的天体运动到分子的运动,到人心理的运动-我们通称为变化,就是一个东西随时间的改变。 人们最成功的描绘运动的模型是牛顿的天体…

求离散马尔科夫链的平稳分布+按照一定概率分布生成想要的样本

1. 求离散马尔科夫链的平稳分布的两种解法 假设离散马尔科夫链的转移矩阵为P PP,平稳分布为π \piπ,则平稳分布满足: PππP \pi \piPππ 1.1 迭代法 求平稳分布的一种简单方法是迭代法,即随机初始化初始分布π 0 \pi_0π 0 …