首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ArchUnit:基于类导入创建规则

ArchUnit是一个基于类导入创建规则的Java静态分析工具。它可以帮助开发人员在代码编译期间检查和保持代码的结构和架构的一致性。

ArchUnit的主要特点包括:

  1. 类导入:ArchUnit使用类导入的方式来创建规则。开发人员可以使用静态导入来引入ArchUnit的API,并使用它来定义自定义的规则。
  2. 规则定义:开发人员可以使用ArchUnit的API来定义各种规则,例如类的依赖关系、包的结构、命名约定等。这些规则可以用于检查代码的结构和架构是否符合预期。
  3. 可扩展性:ArchUnit提供了丰富的API,可以轻松地扩展和自定义规则。开发人员可以根据自己的需求定义自定义的规则,并将其集成到ArchUnit中。
  4. 集成测试:ArchUnit可以与JUnit等测试框架集成,以便在构建过程中自动运行规则检查。这样可以确保代码在每次构建时都符合规则。

ArchUnit的应用场景包括:

  1. 架构验证:开发人员可以使用ArchUnit来验证代码的架构是否符合预期。例如,可以定义规则来检查类之间的依赖关系是否符合预期的层次结构。
  2. 代码维护:ArchUnit可以帮助开发人员在代码维护过程中保持代码的结构和架构的一致性。例如,可以定义规则来检查命名约定是否被遵守。
  3. 团队协作:ArchUnit可以作为团队协作的工具,帮助团队成员共享和遵守代码的结构和架构规范。通过定义规则,团队成员可以在代码评审过程中自动检查代码的结构。

腾讯云提供了一系列与ArchUnit类似的静态分析工具,例如SonarQube和Checkstyle。这些工具可以帮助开发人员在代码编译期间检查和保持代码的质量和一致性。您可以在腾讯云的开发者文档中了解更多关于这些工具的信息和使用方法。

参考链接:

  • ArchUnit官方网站:https://www.archunit.org/
  • 腾讯云开发者文档:https://cloud.tencent.com/document/product/301/4981
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

项目架构级别规约框架Archunit调研

它通过导入所有的代码结构,基于Java字节码分析实现这一点。的主要关注点是使用任何普通的Java单元测试框架自动测试代码体系结构和编码规则。...指定参数进行扫描 需要对代码或者依赖规则进行判断前提是要导入所有需要分析的扫描导入依赖于ClassFileImporter,底层依赖于ASM字节码框架针对文件的字节码进行解析,性能会比基于反射的扫描框架高很多...内建规则定义 扫描和导入完成之后,我们需要定检查规则,然后应用于所有导入,这样子就能完成对所有的进行规则的过滤 - 或者说把规则应用于所有并且进行断言。...规则定义依赖于ArchRuleDefinition创建出来的规则是ArchRule实例,规则实例的创建过程一般使用ArchRuleDefinition的流式方法,这些流式方法定义上符合人类思考的思维逻辑...", "..service.."); 编写好规则后就可以基于导入所有编译好的进行扫描: JavaClasses classes = new ClassFileImporter().importPackage

83410

基于NPOI的Excel导入导出

概述 支持多sheet导入导出。导出字段过滤,合并行。...特性配置导入验证,非空验证,唯一验证,错误标注等 用于基础配置和普通报表的导入导出,对于复杂需求,比如公式,导出图片等暂不支持 GitHub地址: https://github.com/Mike-Zrw...可根据选中的列名或者属性名导出指定的列 导入配置支持 ColumnRegexAttribute:正则判断,正则表达式判断单元格内容 ColumnRequiredAttribute:非空判断,对于不可为空的类型即使没有设置该特性...(即第一次导入错误,修改之后第二次部分导入正确,则正确的颜色会便会默认前景色) 导入结果说明 ImportSuccess :是否导入成功 GetSummaryErrorMessage() : excel...导入结果展示: ? ? ? 测试输出 ?

80710

通过自动化单元测试的形式守护系统架构

基于Archunit可以自动化检测: 循环依赖 包的包含关系 的依赖关系 和包的包含关系 继承关系 注解 Archunit和代码质量分析工具的关系如下图所示,二者都可以对代码进行分析,在功能覆盖上存在一定交叉...:基于职能分类对规则进行分组 图7.左侧:基于逻辑分类进行分组;右侧:基于职能分类进行分组 4.3 团队如何规范化 团队是否要引入Archunit本身也是一项架构决策,建议采用文档化形式对该决策进行记录...对于每条开发规则建议增加比如 “正例”、“反例”、“规则描述”、“规则详细说明”、“是否可自动实现” 等维度描述信息 基于Archunit实现通用架构约束以便在不同项目间进行复用 应用试点:在产品线内部选定一个试点应用...复盘优化:基于试点效果进行复盘,基于团队成员反馈进行架构规则优化、已有规则的修改及废弃等等 推广普及:基于试点的一些实践在其它应用或业务线进行推广普及 对于遗留系统已经形成了特定的规则(有可能是已经发生腐化...Archunit不能做什么: 处理文件 测试所有架构属性 只支持JVM语言 SOURCE注解 需要导入大量代码,加入CICD流水线后的时长影响 不能保证自身的维护性 Archunit对架构约束的自动化检测极有价值

16920

代码检查又一利器:ArchUnit

这里我简单列出来了一些: 抛出的异常不能太过广泛 不能写System.out,而是要用日志输出 不能使用java.util.logging 如果使用贫血模型开发,每个需要放到对应的包中 接口不能放在实现的包中...,就可以为我们前面提到的规则写测试用例了。...当然,也有一些内建的通用规则,它们定义在 com.tngtech.archunit.library.GeneralCodingRules 这个中。关于内建规则的细节,可以查看官方文档。...自定义规则 除了内建规则以外,ArchUnit也支持你定义自己需要的规则,至于如何定义规则,文档中都有详细的介绍。当然,也可以参考这个例子来写一些规则。...https://github.com/TNG/ArchUnit-Examples 如何执行 规则定义好以后如何执行呢?

65910

PHP基于Closure创建匿名函数的方法详解

本文实例讲述了PHP基于Closure创建匿名函数的方法。分享给大家供大家参考,具体如下: Closure 用于代表匿名函数的。 匿名函数(在 PHP 5.3 中被引入)会产生这个类型的对象。...在过去,这个被认为是一个实现细节,但现在可以依赖它做一些事情。自 PHP 5.4 起,这个带有一些方法,允许在匿名函数创建后对其进行更多的控制。...newthis 需要绑定到匿名函数的对象,或者 NULL 创建未绑定的闭包。 newscope 想要绑定给闭包的作用域,或者 'static' 表示不改变。...作用域用来决定在闭包中 $this 对象的 私有、保护方法 的可见性。.../实例,就要像在里面一样,要访问那个的保护/私有属性函数。

64140

架构守护代码化:架构文档即测试

架构守护代码化,即使用易于阅读和维护的领域特定语言,来描述软件架构守护的规则,对诸如于分层架构、包访问规则、包数量、继承命名等进行限制。...Uncode 里设计一个全新的架构守护工具,也就是 Inherd 开源小组里的 Guarding:https://github.com/inherd/guarding/,一个多语言的架构守护工具 —— 基于...基于上述的种种原因,在架构上实施守护便成为诸多架构师要考虑的问题。 为什么需要架构守护代码化? 程序员讨论写文档,也讨厌别人没写文档。 对于架构知识的记载、传播和转换,也是知识传递的范畴。...系统存在架构文档,只在早期创建,但与实际架构不一致。 系统的架构文档持续更新,但是未能及时反应问题。 系统的架构文档持续更新,并使用了架构守护,以确保两者的一致性。...("com.foo") 这句话里,描述了一个规则: Foo 开头的应该放在 com.foo 包下。

50630

使用 Python 创建一个简单的基于规则的聊天机器人

为什么要尝试创建聊天机器人?也许你对一个新项目感兴趣,或者公司需要一个,或者想去拉投资。无论动机是什么,本文都将尝试解释如何创建一个简单的基于规则的聊天机器人。...基于规则的聊天机器人 什么是基于规则的聊天机器人?它是一种基于特定规则来回答人类给出的文本的聊天机器人。...(二者的区别就是基于规则的需要我们指定每一条规则,而且基于模型的会通过训练模型自动生成规则,还记得我们上一篇的”机器学习介绍“吗,"机器学习为系统提供无需明确编程就能根据经验自动学习和改进的能力。")...基于规则的聊天机器人可能基于人类给出的规则,但这并不意味着我们不使用数据集。聊天机器人的主要目标仍然是自动化人类提出的问题,所以我们还是需要数据来制定特定的规则。...回答环节,其实就是通过某种特定的算法或者规则从我们的语料库中搜索最匹配的答案,本文中使用的相似度top1的方法其实就是一个最简单的greedsearch的算法,对于答案结果的优化还可以使用beamsearch

1.1K20

用拖放方式快速创建基于猫框库的表格控件

本文主要探讨两个问题: 1、拖放方式自动创建表格控件 2、使表格控件继承自猫框库 您直接从VFP项目管理器拖放猫框qiyu_grid_sort表格到表单,自动创建的是如下图所示的表格控件,这不是本文要讨论的表格控件形式...下面我删除掉上图红框所示的表格控件,利用CursorAdapter对象以拖放方式自动创建带行列属性设置的表格控件,并使其继承自猫框库中的qiyu_grid_sort。...从下图【属性】窗口的ClassLibrary属性值:(无)和Class属性值:Grid可知,一是CursorAdapter对象自动创建的带行列属性设置的表格控件没有继承自猫框库,二是属性值为斜体,意思是不能修改...LOCATE FOR Objname = 'grd权限表' 2、修改上图当前行的Class()字段值为“qiyu_grid_sort”(即猫框qiyu单笔维护库中的qiyu_grid_sort表格名...USE 3、重新打开frm权限设置.scx表单,您会发现先前CursorAdapter对象自动创建的带行列属性设置的表格控件已经继承自猫框库中的qiyu_grid_sort表格了。

98720

Guarding:开源的多语言架构守护工具

ArchUnit 的启发,借助于易于理解的 DSL,来编写守护规则。支持 Windows、macOS、GNU/Linux 系统。...使用 简单来说,就是我们可以使用一个易于阅读的 DSL 来编写架构规则。而这些个架构规则,可以用于主流的语言。如下是使用 Guarding 编写的规则示例: package(".")...Guarding 规则执行器。 多语言源码解析 在语言解析这事上吧,我又经历了一系列的尝试。 解析方式选型 基于 Antlr 的标准语言解析。...基于 Ctags 的语法分析。另外一种选择是使用在设计 Modeling 的时候,引入的是 Ctags。...包路径解析 值得一提的是包路径解析,所以我们的包解析方式参考的是 ArchUnit 的设计方式。

75420

“分布式” 开发规范治理​

(按顺序排序) 创建态。即将规范内嵌到每个应用的创建模板中。典型的形式是应用脚手架 等。 开发态。即结合开发过程中的工具(如 IDE、Git、CLI),将规范内置到开发流程中。...时机 关注点 工具示例 创建态 代码规范内建、规范执行机制、分层规范等 应用脚手架 开发态 代码规范 CheckStyle 的 Intellij IDEA插件 测试态 代码规范、分层架构、API 规范等...去年,在设计 Guarding 这个多语言的架构守护工具时,其与 ArchUnit 相比的场景是:多语言、多代码库。...与 ArchUnit 相比,Guarding 推荐的这种守护方式是: 以 CLI 的方式运行。无需额外的编码工作,不担心系统被破坏。 配置在持续集成中。 多系统多语言守护。...指标模型:架构适应度函数 虽然,我们可以构建一个基于“分布式”场景的规范,但是从某种意义上来说,这些规范是一种约束。对于开发人员来说,我们需要一种更好的指导指标,而不是我们破坏了哪些规则

75310

【小家java】一个基于POI的Excel导入、导出工具处理(支持xls,xlsx格式),另有SpringMVC的导入、导出案例讲解

一个人有了能量,不是为了满足私欲,而是为了承担更多的使命 前言 表格的导入、导出可谓开发过程中经常会碰到的功能。...然后这种模版化的东西并不需要每次都去编码一次,因此我就整理了一个Excel的万能处理。...能够实现兼容2003、2007的各种Excel格式的导入导出功能,使用起来也非常的方面,适用于所有业务场景,下面会有案例讲解 Excel导入、导出工具源码: /** * 操作Excel的处理器(含导入和导出功能...{ workbook = new XSSFWorkbook(is); } } /** * 需要导出的时候 调用这个构造函数 可以创建一个...注意: POI4.0版本,向下不兼容,都有变化。 POI4.0版本,向下不兼容,都有变化。 POI4.0版本,向下不兼容,都有变化。

2.2K10

IDEA 入门:安装使用详解(创建项目包、运行关闭导入项目、字体字号设置、常用快捷键等)

Module 2.1、在弹出的“New Module”窗口中,点击“New” 2.2、根据项目需要,选择合适的 SDK 2.3、对项目模块起名字 2.4、创建完成后 三、创建包和 3.1、创建包 3.2...、创建 四、运行程序 4.1、代码编辑区鼠标右键或 Ctrl+Shift+F10 4.2、上面菜单栏“Run→Run 'HelloWorld'”或 Shift+F10 五、IDEA 关闭和导入项目 5.1...创建完成后,点击“OK”,具体如下图所示: 看到我们创建好的项目,具体如下图所示: 三、创建包和 3.1、创建包 展开创建的工程,在源代码目录 src 上,鼠标右键,选择“New→Package...”,输入包名,回车,具体如下图所示: 我们可以看到生成包的多级文件夹,具体如下图所示: 3.2、创建创建好的包上,鼠标右击,选择“New→Java Class”创建,输入名,回车,具体如下图所示...、模块、包和、运行程序、关闭导入项目、字体字号设置、常用快捷键等)。

4.2K20

编码数据集生成框架 UnitGen 0.4.0:代码文档生成、测试代码生成

自定义规则、自定义阈值、自定义质量类型等。 基于上述的思想,我们所实现的 UnitGen 架构所如所示: 在实现上主要分为两部分: 基于 LanguageWorker 的上下文策略实现。...除此,UnitGen 在测试数据生成上,同样分为级和方法级,但是方法级的生成比级稍微复杂一些 —— 需要分析出被测函数。...所以,我们在 UnitGen 中创建了 ProjectContext 和 TestStack 来管理它们。...function.Content.isBlank()) return@map // 生成测试指令 } } 而考虑到不同的开发人员编写测试的习惯不一样,所以还需要检查一下测试代码的命名规则...其它 在外部测试时,我们使用了 ThoughtWorks 开源项目作为核心,并结合一些框架的官方 examples,诸如 Spring Data Examples, ArchUnit Examples,

14910
领券