防止传递依赖性的流血

时间:2015-07-02 11:11:36

标签: jpa sonarqube

这是一个多模块Maven项目环境中的SonarQube和JPA问题。

在JPA中,持久域模型类将被注释为@Entity,并将子类化为Entity。模块" myproject-domain"包含这些类的必须依赖于JPA API。

不幸的是,这意味着其他模块依赖于模块" my-domain"将继承JPA API的编译时依赖性。我们的目的是开发人员只能在一个模块内调用JPA本身" myproject-repository"。其他模块,例如" myproject的应用内"将依赖于" myproject-domain"以及存储库的INTERFACE。

我的目的是阻止" myproject-app"在编译时访问JPA文物,例如EntityManager的。

我可以看到两种方法来做到这一点 1.在" myproject-domain"中使用受限制的JPA库。模块,它只包含Entity和Annotation类。 2.让SonarQube在除#34; myproject-domain"之外的所有模块中强制限制使用除Entity之外的JPA类。和" myproject-repository"。

SonarQube有可能吗? 是否有一个已经可用的受限制的JPA库,如我所描述的那样?

非常感谢,罗宾。

2 个答案:

答案 0 :(得分:3)

也许您可以使用规则模板squid:ArchitecturalConstraint创建自定义规则,该规则不允许从myproject-app个包到javax.persistence.**

的来电

答案 1 :(得分:0)

这应该是纯粹的maven手段。只需将JPA-API的依赖关系标记为" my-domain"中的可选项。如果需要,请在" myproject-repository"中复制此可选依赖项。 见https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html