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

Java 如何在Maven项目中检查项目边界访问,java,maven-2,jdepend,Java,Maven 2,Jdepend,我有一组Maven项目,我想定义访问规则。 例如,项目数据库和缓存只能由项目数据层访问,而不能从项目UiLayer访问。我说的是maven项目,但是包级访问验证也可以工作,只要它很容易集成到maven项目中 我已经看过了,它有一组很好的特性,比如访问控制b/w java包、样式检查等,但是一直很难将其绑定到一组maven项目中 还有一个仍在开发中,我已经能够让它为我工作,但我担心它不会对我有什么好处。 此插件在所有项目类上运行验证。 这意味着从现在起,我必须让macker-rules.xml在每

我有一组Maven项目,我想定义访问规则。
例如,项目数据库和缓存只能由项目数据层访问,而不能从项目UiLayer访问。我说的是maven项目,但是包级访问验证也可以工作,只要它很容易集成到maven项目中

我已经看过了,它有一组很好的特性,比如访问控制b/w java包、样式检查等,但是一直很难将其绑定到一组maven项目中

还有一个仍在开发中,我已经能够让它为我工作,但我担心它不会对我有什么好处。
此插件在所有项目类上运行验证。
这意味着从现在起,我必须让macker-rules.xml在每个maven项目中定义访问规则,以确保规则不会被破坏。这看起来像是一场维护噩梦

那么-我是否错过了macker maven插件的使用?也许我没有正确地使用它

我没有使用JDepend的经验,但从短文来看,它看起来像是macker的精简版。有一个,但它的功能只是生成关于使用情况和统计数据的报告,但我真正需要的是其他东西,一个访问检查,如果失败,它将导致构建失败

有人能为maven项目的项目访问检查或包访问检查提供更好的替代方案吗


谢谢

如果您将Maven项目拆分为子项目并正确构建API,那么就有可能实现访问限制,作为子项目依赖关系的副作用

我认为您正在从中查找被禁止的依赖项


org.apache.maven.plugins
maven enforcer插件
1
强制执行禁止的依赖项
执行
org.apache.maven
maven:badArtifact
*:坏神器
maven:badArtifact:1.0
真的

+1很高兴了解Macker。enforcer插件很不错。它的定义仍然有点麻烦,但这或多或少是我想要的,所以谢谢。当我想说“允许DataLayer项目访问缓存项目,但不允许任何其他项目访问缓存”时,这很麻烦。因此,我可以通过将顶层pom中的excludes和数据层pom中的include相结合来实现这一点,但这并不是最方便用户的方法。@你说得对。我建议将最常见的配置放在PluginManager部分。对于其他情况,在单个POM中覆盖它。
<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>