【问题标题】:ArchUnit: How to avoid dependency violation to java classesArchUnit:如何避免对 java 类的依赖冲突
【发布时间】:2019-06-03 11:54:07
【问题描述】:

我想验证,给定包中的类仅指驻留在包本身中的类。但是我得到了违反,告诉我a类取决于例如java.lang.String,这对我来说完全没问题。有没有办法忽略基本的java包?

        @ArchTest
        static final ArchRule zeroDependencyOfDomain = noClasses().that()
            .resideInAPackage("..domain..")
            .should().dependOnClassesThat()
            .resideOutsideOfPackages("..domain..");

【问题讨论】:

    标签: java archunit


    【解决方案1】:

    与其他答案类似,我也没有找到比这更好的方法:

    private static final String[] COMMON_PACKAGES = {
        "java..",
        "javax..",
        "com.google..",
        "org.springframework.."};
    
    @ArchTest
    final ArchRule classesInProdutPackageNoOutsideAccess =
        classes()
            .that()
            .resideInAnyPackage(PACKAGE_FOO)
            .should()
            .onlyAccessClassesThat()
            .resideInAnyPackage(commonPackagesAnd(PACKAGE_FOO));
    
    
    private static String[] commonPackagesAnd(String... packages) {
        return ArrayUtils.addAll(packages, COMMON_PACKAGES);
    }
    

    【讨论】:

      【解决方案2】:

      您可以显式允许依赖于 java 包:

      @ArchTest
      static final ArchRule zeroDependencyOfDomain = noClasses().that()
          .resideInAPackage("..domain..")
          .should().dependOnClassesThat()
          .resideOutsideOfPackages("..domain..", "java..");
      

      您也可以使用classes()onlyDependOnClassesThat(),我认为这更容易阅读:

      @ArchTest
      static final ArchRule zeroDependencyOfDomain = classes().that()
          .resideInAPackage("..domain..")
          .should().onlyDependOnClassesThat()
          .resideInAnyPackage("..domain..", "java..");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-11
        • 1970-01-01
        • 2019-09-26
        • 2020-04-06
        • 2015-07-11
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多