如何在Maven项目中检查项目边界访问

问题描述:

我有一组Maven项目,我想定义访问规则。
例如,项目数据库和缓存只能由项目DataLayer访问,但不能从项目UiLayer访问。我使用Maven项目来讲话,但只要易于集成到Maven项目中,包级访问验证也可以工作。如何在Maven项目中检查项目边界访问

我已经看过Macker,它有一套很好的功能,比如访问控制黑白java包,样式检查等,但一直很难将它们绑定到一组maven项目中。

macker-maven-plugin,这还在开发中,我已经能够为我工作,但恐怕这不会为我服务。
该插件在所有项目的类上运行验证。
这意味着我必须从现在开始在每个maven项目中都有macker-rules.xml定义访问规则,以确保规则不被破坏。这看起来像是一场维护噩梦。

所以 - 我错过了使用macker-maven-plugin的东西吗?也许我没有正确使用它。

我对JDepend没有经验,但是从短暂的阅读看来,它看起来像是瘦客户端的版本。有一个jDepend maven plugin,但它的功能仅仅是生成有关使用情况和统计​​信息的报告,但我真正需要的是其他内容,即访问检查,如果失败,它将失败构建。

有人可以建议一个更好的替代项目访问检查或包访问检查Maven项目?

感谢

+0

+1很高兴认识Macker。 – cetnar 2010-01-05 11:31:28

我认为你正在寻找从maven-enforcer-plugin禁止的依赖关系。

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
     <execution> 
     <id>enforce-banned-dependencies</id> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
     <configuration> 
      <rules> 
      <bannedDependencies> 
       <excludes> 
       <exclude>org.apache.maven</exclude> 
       <exclude>org.apache.maven:badArtifact</exclude> 
       <exclude>*:badArtifact</exclude> 
       </excludes> 
       <includes> 
       <!--only 1.0 of badArtifact is allowed--> 
       <include>org.apache.maven:badArtifact:1.0</include> 
       </includes> 
      </bannedDependencies> 
      </rules> 
      <fail>true</fail> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 
+0

执行者插件很好。它的定义仍然有点麻烦,但是它或多或少都是我在寻找的,所以谢谢。 当我想说“允许DataLayer项目访问缓存项目,但不允许任何其他项目访问缓存”时,这很麻烦。所以我可以通过顶部pom中的排除组合来实现,并且包含在DataLayer pom中,但这不是最人性化的方法。 – Ran 2010-01-05 14:18:13

+0

@Ran你说得对。我可以建议的是将最常见的配置放在pluginManagment部分。对于其他情况,可以在单独的poms中覆盖它。 – cetnar 2010-01-05 14:26:38

如果拆分您的Maven项目的子项目进入和构建API的权利,有可能实现您的访问限制为子项目依赖的副作用。