当前位置: 首页 > 知识库问答 >
问题:

如何在Java中使用ArchUnit禁止文件中的特定内容

漆雕皓轩
2023-03-14

我想要一个规则来检查一些特定的字符串。假设我们不想在代码库中看到“Objects.nonNull”,而希望导入“nonNull”静态。

我怎样才能在ArchUnit中做到这一点?我知道它是为了更多的架构目标,但是我们已经在项目中使用了它,所以也许我们也可以将它用于较低级别的检查。

或者如何在其他框架中轻松完成?

共有1个答案

左仰岳
2023-03-14

这在ArchUnit中是不可能的(至少我不知道,API似乎没有提供这种可能性)。这也有道理:导入只存在于源代码中,而不存在于生成的字节码中。因此,ArchUnit无权访问此信息。

您可以做的是在构建管道中定义一个任务,该任务在所有相关文件上调用grep。大致如下:

grep -q 'Objects\.nonNull` *.java && echo "Qualified nonNull call found! Aborting.";

或者,您可能已经在使用CheckStyle在代码中强制(样式)规则。CheckStyle提供自版本4.0以来的Regexp检查:

检查指定的模式是否存在、存在次数少于设定次数或文件中不存在。

例子:

<module name="Regexp">
  <property name="format" value="Objects\.nonNull"/>
  <property name="illegalPattern" value="true"/>
</module>
 类似资料:
  • 这里我正在尝试读取一个包含.sql文件的文件夹,我将这些文件放在一个数组中,现在我的要求是读取每个文件并找到特定的单词,如join。如果join在文件中存在,返回文件名或丢弃,请有人帮助我这样做。

  • 问题内容: 在Java中,是否有任何方法可以从文件中读取特定行?例如,读取第32行或任何其他行号。 问题答案: 除非你以前对文件中的行有一定的了解,否则没有阅读前31行就无法直接访问第32行。 所有语言和所有现代文件系统都是如此。 如此有效地,你只需阅读第32行,直到找到第32行为止。

  • 我需要在系统中向客户提供zip文件的视图,并允许客户下载选定的文件。 解析zip文件并显示在网页上。并记住后端的每个zipentry位置(例如file1从字节100宽度1024字节开始)。 当客户点击下载按钮时下载指定的文件。 现在我已经记住了所有zipentry位置,但是有java zip工具来解压缩zip文件的指定位置吗??API就像解压一样(file, long entryStart, lo

  • 问题内容: 假设我有一个名为abhishek.txt的文件,其中包含以下行 我是,你叫什么名字。 现在我要写 阿比舍克 在“我是”之后,就像我是Abhishek,..如何直接在此特定位置书写内容。 问题答案: 您不能将数据插入文件中。您可以使用覆盖特定位置的数据。但是,插入操作需要更改其后的所有数据。对于您的情况,请尝试以下类似方法:

  • 我想使用ArchUnit来强制使用SLF4J日志框架,避免使用简单的系统。out调用。此外,我希望避免使用任何其他日志框架。我该如何实施此类检查? 目前我写了这个测试 但它实际上并没有强制SLF4J的使用,只是限制的使用,并防止依赖于类(实际上常量所在的位置)。 是否是我的案例更优雅的解决方案?

  • 我目前正在为学校写我的项目,要求我读写txt文件。我可以正确地读取它们,但是我只能从附加的FileWriter写入它们的末尾。我希望能够通过首先删除行上的数据,然后写入新数据,来覆盖我的txt文件中行号上的内容。我试图使用这种方法... 但我相信 seek 方法以字节而不是行号移动。谁能帮忙。提前致谢:) 另外,file.lineNumber方法返回旧数据所在的确切行号,所以我已经有了需要写入的行