我想要一个规则来检查某些特定的字符串。假设我们不想在我们的代码库中看到“ Objects.nonNull ”,并且想要导入静态的“ nonNull ”。
我怎样才能在ArchUnit中做到这一点?我知道它是为了更多的架构目标,但我们已经在项目中拥有它,所以也许我们也可以将它用于较低级别的检查。
或者如何在其他框架中轻松完成?
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>