Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArchUnit:如何避免对java类的依赖冲突_Java_Archunit - Fatal编程技术网

ArchUnit:如何避免对java类的依赖冲突

ArchUnit:如何避免对java类的依赖冲突,java,archunit,Java,Archunit,我想验证,给定包中的类只引用驻留在包本身中的类。然而,我得到了一个违规,告诉我a类依赖于例如java.lang.String,这对我来说是完全正确的。有没有办法忽略基本的java包 @ArchTest 静态最终ArchRule zeroDependencyOfDomain=noClasses().that() .ResideInAppackage(“…域…”) .should().dependOnClassesThat() .居住区视频包(“域名”); 您可以显式地允许依赖于java包: @Ar

我想验证,给定包中的类只引用驻留在包本身中的类。然而,我得到了一个违规,告诉我a类依赖于例如java.lang.String,这对我来说是完全正确的。有没有办法忽略基本的java包

@ArchTest
静态最终ArchRule zeroDependencyOfDomain=noClasses().that()
.ResideInAppackage(“…域…”)
.should().dependOnClassesThat()
.居住区视频包(“域名”);

您可以显式地允许依赖于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..");

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

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);
}