如何手动禁用/黑名单 Maven 存储库

Posted

技术标签:

【中文标题】如何手动禁用/黑名单 Maven 存储库【英文标题】:How to manually disable/blacklist Maven repository 【发布时间】:2010-12-17 18:58:52 【问题描述】:

在我的基础项目中,我使用 JasperReports 的依赖项,该依赖项在其 pom.xml 中具有不存在的存储库声明。当我运行每个 Maven commad 时,在这个 Jasper 存储库中寻找 commons-collection 的依赖项,所以我需要等待超时。 这是我的基础项目,在我的其他项目中用作依赖项,所以我需要再次等待超时。 有没有办法将此存储库移至黑名单或覆盖此设置?

注意事项: 1.为什么在Jasper存储库中搜索,可能是因为范围

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>[2.1,)</version>
    <scope>compile</scope>
</dependency>

2.我解决此问题的想法是更改 jasper pom 并使用代理存储库,但我正在寻找另一种选择。 3.我用的是jasperreports 1.3.3版本,不想改。

【问题讨论】:

【参考方案1】:

以下内容不会告诉 maven 忽略特定的存储库:

    <repository>
        <id>repo1.maven</id>
        <url>http://repo1.maven.org</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>

【讨论】:

上述方法是将maven repo列入黑名单的好方法,该repo位于某些传递依赖的pom.xml中,并且会导致问题(例如您从java.net获得的可怕的301重定向),其中组件已经存在于 Maven 中心。 这件事发生在我身上 - 一个依赖项引用了一个技术预览存储库,该存储库现在已被一个 GA 存储库替换。用它来阻止它,世界上一切都很好,但是唷 - 这是一个很难追踪的! 这对我不起作用。我仍然可以从这个 repo 下载 jars。 ID 必须与声明 POM 中使用的 ID 相匹配,所以在这里我要阻止此查找 Downloading from mvmsearch: http://www.mvnsearch.org/maven2/commons-logging/commons-logging/maven-metadata.xml 被覆盖的存储库的 ID 必须是 mvmsearch【参考方案2】:

您可以通过在 settings.xml 中使用 mirrorOf 声明来覆盖 repo。尽管这不是它通常的用途,但在 jasper 报告 reoid 上设置例如 mirrorOf 并将其指向 Central (repo1.maven.org) 将有效地使其消失。

更好的选择是使用像 Nexus 这样的存储库管理器,然后您可以控制实际提供哪些代理和工件。

【讨论】:

我通过添加到 settings.xml(/conf/settings.xml 或 ~/.m2/settings.xml)&lt;settings&gt;...&lt;mirrors&gt; &lt;mirror&gt; &lt;id&gt;disabled-jave.net&lt;/id&gt; &lt;url&gt;https://jcenter.bintray.com/&lt;/url&gt; &lt;mirrorOf&gt;http://download.java.net/maven/2&lt;/mirrorOf&gt; &lt;/mirror&gt;&lt;/mirrors&gt; 禁用了 java.net【参考方案3】:

有没有办法将此存储库移至黑名单或覆盖此设置?

据我所知,这是不可能的。

为什么要在 Jasper 存储库中搜索,可能是因为范围

是的,我认为范围对这种行为是“负责任的”。如果没有范围,Maven 就不必检查远程存储库中是否有比本地存储库中可用的版本更新的版本。

我解决此问题的想法是更改 jasper pom 并使用代理存储库,但我正在寻找另一种选择。

修复 jasper pom 并使用代理存储库当然是理想的解决方案,但这并不总是可行的。不过,也许有一种解决方法。您是否尝试排除 jasperreports 具有范围的传递依赖项并在您的 pom 中自己提供它们(具有固定版本)。像这样的:

<dependencies>
  <dependency>
    <groupId>jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>1.3.3</version>
    <!-- Remove Transitive dependencies drawn by Jasper Report that we don't want -->
    <exclusions>
      <exclusion>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
      </exclusion>
      ...
    </exclusions>
  </dependency>
  <dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>2.1</version><!-- Or whatever version, as long as it's fixed -->
    <scope>compile</scope>
  </dependency>
  ....
<dependencies>

这样,Maven 不必检查不存在的存储库,这应该避免等待超时。我会试一试的。

我使用 jasperreports 1.3.3 版本,我不想更改它。

没问题。

【讨论】:

@Pascal。谢谢它有帮助。 Maven 中的范围是邪恶的 :) @cetnar 很高兴它很有用。我同意,范围不好,它们带来的问题多于解决方案。 Fred 在下面的回答是它可以被禁用似乎是正确的,我刚刚使用它。也许是一个新功能?

以上是关于如何手动禁用/黑名单 Maven 存储库的主要内容,如果未能解决你的问题,请参考以下文章

Charles——charles 工具栏Tools总结——禁用缓存

Confluence 6 白名单允许进入和禁用

Confluence 6 白名单允许进入和禁用

discord.js 如何删除所有频道中包含黑名单的消息

Java如何禁用exec等系统函数

text 禁用-候补名单标签