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

时间:2009-11-18 08:40:00

标签: maven-2 dependencies repository

在我的基础项目中,我使用了JasperReports的依赖项,它的pom中存在不存在的存储库声明。当我运行每个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版本,我不想改变它。

4 个答案:

答案 0 :(得分:16)

下面不会告诉maven忽略特定的存储库:

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

答案 1 :(得分:12)

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

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

答案 2 :(得分:8)

  

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

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

  

为什么它在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版本,我不想改变它。

没问题。

答案 3 :(得分:0)

弗雷德的解决方案对我很有帮助。我必须匹配来自违规传递依赖项的pom文件的存储库Id,才能使此解决方案正常工作。