禁止指定存储库

此规则检查此 maven 会话(在 pom 文件甚至 settings.xml 中定义)是否包含指定的禁止存储库。

与“requireNoRepositories”有什么区别?

“requireNoRepositories”的目的是:检测 pom 和 pom 的 parent 是否包含 repositories 定义。指导用户使用正确的约定(不在 pom 文件中定义存储库)。所以它只分析当前的 pom 及其父 pom 文件。

但是“BannedRepositories”是不同的目的,它就像“BannedDependencies”。它将从 maven 会话上下文中检测被禁止的存储库,而不仅仅是 pom.xml 和父母。它试图避免滥用不正确的存储库。它将从当前的 Maven 会话上下文中检测被禁止的存储库。

支持参数

  • banRepositories - 指定禁止的非插件存储库。这是 http/https url 模式的黑名单。
  • banPluginRepositories - 指定被禁止的插件存储库。这是 http/https url 模式的黑名单。
  • allowedRepositories - 指定明确允许的非插件存储库。这是 http/https url 模式的白名单。
  • allowedPluginRepositories - 指定明确允许的插件存储库。这是 http/https url 模式的白名单。

示例配置

例如,一家公司想要限制存储库的使用。但是不同的开发者可能会使用不同的 settings.xml。甚至他们项目的 pom 也定义了不同的存储库。对于这种情况,可以利用这个强制规则来禁止指定的存储库,甚至使用 allowedRepositories/allowedPluginRepositories 来禁止其他意外的存储库。

前任。http://repo1/xyz 是要被禁止的仓库。http://repo2/xyz 是现在要使用的存储库。

示例插件配置:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>enforce-banned-repositories</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedRepositories>
                  <bannedRepositories>
                    <bannedRepository>http://repo1/*<bannedRepository>
                  </bannedRepositories>
                  <bannedPluginRepositories>
                    <bannedPluginRepository>http://repo1/*<bannedPluginRepository>
                  </bannedPluginRepositories>
                                  
                  <!-- for some cases, white list is more effective -->
                  <!--
                                  
                  <allowedRepositories>
                    <allowedRepository>http://repo2/*<allowedRepository>
                  </allowedRepositories>
                  <allowedPluginRepositories>
                    <allowedPluginRepository>http://repo2/*<allowedPluginRepository>
                  </allowedPluginRepositories>
                                  
                  -->
                </bannedRepositories>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

值得注意的

  • http/https url 模式支持通配符“*”
  • 此规则将检测 maven session 本身上的禁止存储库而不是 pom 或设置,因此如果用户在 settings.xml 中定义了“mirrorOf”,即使在 pom.xml 中定义了禁止存储库,也不会被检测到。
            <mirrors>
             <mirror>
               <id>nexus</id>
               <mirrorOf>*</mirrorOf>
               <url>http://.../nexus/..</url>
             </mirror>
            </mirrors>