如何从 Archunit 测试中排除某个包?

Tri*_*ate 3 archunit

在我的根项目中,我有两个具有该包结构的子项目。

Project 1: com.app
Project 2: com.app.api
Run Code Online (Sandbox Code Playgroud)

在项目 1 中,我有一个用 ArchRules 定义的类,注释如下

@AnalyzeClasses( packages = "com.app")
public class ArchTests
Run Code Online (Sandbox Code Playgroud)

问题是,如果我运行该测试,它也会分析项目 2 中的所有内容。如何排除 com.app.api 包?

Man*_*red 8

您可以使用自定义importOptions

@AnalyzeClasses(packages = "com.app", importOptions = ExcludeApiImportOption.class)
Run Code Online (Sandbox Code Playgroud)

其中 theImportOption基本上是一个谓词是否Location应该导入 a:

class ExcludeApiImportOption implements com.tngtech.archunit.core.importer.ImportOption {
    @Override
    public boolean includes(Location location) {
        return !location.contains("com/app/api");
    }
}
Run Code Online (Sandbox Code Playgroud)