- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个包com.myapp.foo
和com.myapp.bar
,我想知道显式检查这两个包(和只有那些,因为还有一些 com.myapp.XX
) 彼此不依赖。
这就是我现在所拥有的(工作出色):
SliceAssignment packagesFooAndBar = new SliceAssignment() {
@Override
public String getDescription() {
return "foo and bar";
}
@Override
public SliceIdentifier getIdentifierOf(JavaClass javaClass) {
if (javaClass.getPackageName().startsWith("com.myapp.foo")) {
return SliceIdentifier.of("foo");
}
if (javaClass.getPackageName().startsWith("com.myapp.bar")) {
return SliceIdentifier.of("bar");
}
return SliceIdentifier.ignore();
}
};
@ArchTest
final ArchRule packagesFooAndBarNotDependOnEachOther = SlicesRuleDefinition
.slices()
.assignedFrom(packagesFooAndBar)
.should()
.notDependOnEachOther();
是否有更优雅的方法,也许不使用 SliceAssignment
?谢谢!
最佳答案
我可能会使用两条规则。
@ArchTest
final ArchRule fooShouldNotDependOnBar = ArchRuleDefinition
.classes()
.that().resideInAnyPackage("com.myapp.foo")
.should().onlyDependOnClassesThat()
.resideOutsideOfPackage("com.myapp.bar");
@ArchTest
final ArchRule barShouldNotDependOnFoo = ArchRuleDefinition
.classes()
.that().resideInAnyPackage("com.myapp.bar")
.should().onlyDependOnClassesThat()
.resideOutsideOfPackage("com.myapp.foo");
如果您想在单个规则中编写相同的内容而不使用自定义类,则以下内容应该可行。我不确定我是否会称其为“优雅”,因为它看起来有点复杂。可能有更好的方法将其编写在单个规则中。
@ArchTest
final ArchRule packagesFooAndBarNotDependOnEachOther = SlicesRuleDefinition
.slices()
.matching("com.myapp.(*)")
.should()
.notDependOnEachOther()
.ignoreDependency(
JavaClass.Predicates.resideOutsideOfPackages("com.myapp.foo", "com.myapp.bar"),
DescribedPredicate.alwaysTrue())
.ignoreDependency(
DescribedPredicate.alwaysTrue(),
JavaClass.Predicates.resideOutsideOfPackages("com.myapp.foo", "com.myapp.bar"))
);
该规则首先匹配com.myapp
的所有直接子包。第一个 ignoreDependency
然后排除给定包之外的类的所有依赖项(以允许例如 com.myapp.xx
访问 com.myapp.foo
)。第二个 ignoreDependency
排除给定包对任何外部包的所有依赖项(以允许例如 com.myapp.foo
访问 com.myapp.xx
) >).
关于java - ArchUnit:检查包是否相互依赖的最优雅的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55301032/
我想知道 ArchUnit 中的 members() 和 fields() 之间有什么区别。我找不到任何相关文档。 最佳答案 ArchUnit User Guide记录域模型。members一个类由其
我正在尝试编写一个 ArchUnit 测试规则,它应该确保用 @ComponentInterface 注释的接口(interface)注释具有用 @Input 注释的方法参数注解。 像这样: Arch
我使用 Jupiter 编写了一些 ArchUnit 测试。我发现一些示例表明,您可以使用非静态方法编写 ArchUnit 测试,例如: @Test void enforceExceptionName
我有两个单独的包: mycomp.sales - Order - OrderPlaced mycom.delivery - Delivery - OrderPlacedListener (depend
我使用 Jupiter 编写了一些 ArchUnit 测试。我发现一些示例表明,您可以使用非静态方法编写 ArchUnit 测试,例如: @Test void enforceExceptionName
给定ArchUnit版本 0.12 中的库: 是否可以测试一个场景“用A注释的方法也应该用B注释或在用B注释的类型中声明>”? 示例: A.java @Target({ElementType.METH
我有由我的自定义注释注释的类 @Inner . 我想为 ArchUnit 创建规则检测是否在同一包或子包中访问使用此特定注释注释的类。 例如: 封装:com.example.my.package 包含
我有两个包com.myapp.foo和com.myapp.bar,我想知道显式检查这两个包(和只有那些,因为还有一些 com.myapp.XX) 彼此不依赖。 这就是我现在所拥有的(工作出色):
我的架构规则之一是应用程序代码抛出的所有异常必须是 CustomException 或 CustomException 的子类。 我很难在 ArchUnit 中编写此规则。我目前拥有的是以下内容: p
我有一个 @Audit 注释,它有许多可选属性,我需要对某些包强制使用一个 boolean 属性 useAccount = true。 我正在尝试使用 archunit 来完成此验证,这样每当开发人员
我写了我的第一个 ArchUnit 测试: import static com.tngtech.archunit.library.dependencies.SlicesRuleDefinition.*
在 ArchUnit 中为分层架构创建规则时,我不清楚如何排除单个类(Main)。 The base example排除源和目标。 ...但我不明白它如何转换为我的需要。我只想忽略 Main。为什么?
我想验证给定包中的类仅引用驻留在包本身中的类。但是我遇到了违规行为,告诉我 a 类取决于例如java.lang.String,这对我来说完全没问题。有没有办法忽略基本的java包? @
如果我想使某个 Java 包免受 ArchUnit 的第 3 方依赖,我该怎么做? 更具体地说,我正在考虑将我的域模型保持在六边形架构中,不受 Spring 代码的影响。我指定了一些我认为应该阻止模型
我用自定义注释注释了一些方法:“ExistForTesting” @Documented @Target({TYPE, FIELD, METHOD}) @Retention(SOURCE) publi
我正在尝试使用 ArchUnit 进行单元测试检查我是否有任何未使用的类。但我不知道如何检查某个类是否被 MyClass.class 引用。 例如我有一个类: public class MyClass
我们正在将代码重构为六边形架构,代码中的每个域都是一个单独的 gradle 模块。目前所有的代码都是一个模块,每个领域都有一个包,模块之间可以自由交互。在将每个域包提取到域模块之前,我们希望首先在包级
我是一名优秀的程序员,十分优秀!