当前位置: 首页 > 知识库问答 >
问题:

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

颜实
2023-03-14

我想验证一下,给定包中的类只引用驻留在包本身中的类。然而,我遇到了一个冲突,告诉我a类依赖于例如java.lang.String,这对我来说是完全可以的。有没有一种方法可以忽略基本的java包?

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

共有1个答案

冀阳文
2023-03-14

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

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);
}
 类似资料:
  • 我正在Java EE6平台上开发一个企业应用程序。IDE是NetBeans 7.2,应用服务器是GlassFish 3.1.2.2。 业务逻辑必须使用一个库(具体来说是HBase-RDF)来处理其核心中的一些任务。最初的HBase-RDF代码依赖于许多包,我相信GlassFish已经使用了它们的新版本。例如,我可以看到javax.xml、javax.activation、com.sun.jerse

  • 如果我正在创建一个带有如下头文件的静态库: 在我自己的项目中,我可以告诉编译器(在我的例子中是Visual Studio)在哪里查找SomeHeaderFile.h。但是,我不希望我的用户关心这一点--他们应该能够包含我的头,而不必通知编译器SomeHeaderFile.h的位置。 这类情况通常如何处理?

  • 问题内容: 假设我有四个项目: 项目A(依赖于B和D) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下,如果我运行项目A,则Maven将正确地解决对D的依赖关系。如果我理解正确,则Maven始终以最短的路径获取依赖关系。由于D是A的直接依赖项,因此将使用B内指定的D而不是D。 但是现在假设这种结构: 项目A(依赖于B和C) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下

  • 问题内容: 有没有一种方法可以找到Java主类的所有类依赖关系? 我一直在手动筛选主类及其导入的内容,但是后来意识到,因为不必导入同一包中的类,所以我整理了一个不完整的列表。 我需要一些可以递归地找到依赖关系的东西(也许到定义的深度)。 问题答案: 只需使用javac即可轻松完成。删除您的类文件,然后编译主类。javac将递归地编译它需要的任何类(前提是您不要在名称奇怪的文件中隐藏包私有类/接口)

  • 我无法使用ArchUnit制定以下测试: 我想确保某个包中的所有类只访问应用程序基包之外或某个子包内的类(“或”而不是“xor”)。 我得到的是: 问题是,或条件应该在onlyAccessClassesthat()中。如果一个类同时具有两种类型的访问权限,上述公式将失败,我希望这两种类型都有效。 我怎样才能实现我想要的?谢谢你在这方面的任何帮助...

  • 问题内容: 最近,我被分配创建拍卖系统的任务。在我的工作中,我遇到了无数次由于列名不明确而导致包含联接的SQL查询无法执行的情况。考虑以下(简化的)拍卖表结构: 表: (创建拍卖的用户的ID) 表: (添加项目的用户的ID) (有该物品的拍卖的ID) (初始价格) 表: 表: (出价的用户的ID) (已提高价格的项目) (优惠价格) 如您所见,有许多列具有冲突的名称。连接这些表需要采取一些措施来消