是否有一个增强Java访问控制的maven插件?

时间:2016-02-04 13:59:32

标签: java maven visibility

是否有maven插件使mvn verifyaggregating project失败时,其子模块或其传递依赖性依赖于它们不应该的东西。

我希望能够限制使用公共API来表达像

这样的政策
  1. 只有白名单中的类或包可以调用此公共构造函数/方法。
  2. 不应该调用由代码生成器生成的这个公共setter - 它应该是package-private。
  3. 动机&警告

    我意识到有很多方法可以使用反射和反序列化来解决这些需求。我的最终目标是允许系统架构师和技术导致制定像

    这样的政策
    1. 安全关键API的所有使用都应该在安全性审查的模块中。如果您需要扩展白名单,请与他们联系。
    2. 这些弃用的API被禁止使用新的API。有一个白名单,可以随着时间的推移收缩。
    3. 系统架构师会对信任应用程序开发人员进行处理,但我们希望使用有用的错误消息标记天真的策略违规,并且我们希望破解策略的开发人员无法合理地拒绝他们这样做。

      反思和反序列化这样的技巧属于那种不可理解的黑客行为。

      这有点像Jigsaw的一些目标,其中模块(包组)可以声明其公共接口仅限于某些包,但拼图不是广泛可用的。

      这个问题与"Make Java methods visible to only specific classes"不同,因为我不是在Java语言中询问如何做到这一点。

1 个答案:

答案 0 :(得分:3)

您可以使用checkstyle执行此类检查,对于您可以使用的用例import control

根据以下答案,这似乎并不支持完全合格的导入:

Checkstyle rule to limit interactions between root packages (with ImportControl?)

How to prevent fully qualified names in Java code

第二个答案建议您可以通过使用其他工具PMD禁止完全合格的导入来解决这个问题。

对于JSP,这些通常是在servlet容器中编译的,但是有一种方法可以使用maven plugin预编译它们。