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

3
我有一组Maven项目,希望定义访问规则。
例如,Database和Cache项目只能由DataLayer项目访问,而不能从UiLayer项目访问。我说的是Maven项目,但包级别的访问验证也可以使用,只要容易集成到Maven项目中即可。
我看过Macker,它有很多不错的功能,如Java包之间的访问控制、样式检查等,但我一直在努力将其与一组Maven项目结合起来。
macker-maven-plugin,仍在开发中,我已经能够让它为我工作,但我担心它不能很好地为我服务。
这个插件在所有项目的类上运行验证。
这意味着我必须在每个Maven项目中都有macker-rules.xml来定义访问规则,以确保规则不被破坏。这看起来像是一个维护噩梦。
那么 - 我在使用macker-maven-plugin时漏掉了什么吗?也许我没有正确使用它。
我对JDepend没有经验,但是从简短的阅读来看,它似乎是Macker的轻量版。有一个jDepend maven plugin,但它的功能仅限于生成有关使用和统计信息的报告,但我真正需要的是其他内容,即如果访问检查失败,则构建将失败的访问检查。

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

谢谢

2个回答

1

我认为你正在寻找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>

执法插件很好用。虽然定义有点繁琐,但基本上是我想要的,所以谢谢。 当我想说“允许DataLayer项目访问Cache项目,但禁止其他任何项目访问Cache”时,它就变得繁琐了。因此,我可以通过在顶级pom中组合排除和在DataLayer pom中包含来实现这一点,但这不是最用户友好的方法。 - Ran
@Ran 你说得对。我建议将最常见的配置放在 pluginManagment 部分中。对于其他情况,在各个 POM 中覆盖它。 - cetnar

0
如果您将Maven项目拆分为子项目并正确构建API,那么可能可以通过子项目依赖的副作用来实现访问限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接