1

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

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

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

4

1 回答 1

1

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>
于 2020-06-04T18:17:33.700 回答