0

当我运行Apache Commons VFS2site的构建时,依赖报告插件会尝试填充一个矩阵,该矩阵可以通过哪个存储库获得。

就我而言,它还尝试检查 maven.glassfish.org 存储库,该存储库已被 AFAIK 放弃。但由于它仍然在一些使用过的依赖 POM 上,它仍然出现在我的项目中(我想我不能轻易影响)。

[INFO] Generating "Dependencies" report    --- maven-project-info-reports-plugin:2.7
[ERROR] Unable to determine if resource asm:asm:jar:3.1:provided exists in http://maven.glassfish.org/content/groups/glassfish
...

这不仅会产生很多错误,而且还需要时间。此外,我想将报告中的列限制为与该项目相关的存储库。

我想知道,有没有办法让插件(以及所有 Maven)跳过特定的存储库?你会如何在我的项目 POM中将它们列入黑名单?

dependency:list-repositories目标没有显示这个 repo,但是当我搜索所有缓存的 POM 文件时,我<id>glassfish-repository</id>com.sun.jersey:jersey-server:1.8.

4

1 回答 1

1

选择以下之一:

  1. 正确的答案是让他们从 pom 定义中删除存储库。请参阅为什么将存储库放在您的 POM 中是一个坏主意。应该没有理由不在那里托管其他开源项目。要说服其他存储库将其项目发布到 Central,请将它们指向文档http://maven.apache.org/guides/mini/guide-central-repository-upload.html,或者您可以为它们进行上传。如果它只是一些可能是最简单的工件。

请记住,在 pom 中定义的每个额外 repo 都会影响构建的性能,因为 Maven 必须检查每个repo中的工件。如果您只需要添加一个存储库,这不是一个大问题......但是问题越来越大,接下来您知道您的 maven 构建是检查每个工件的 50 个存储库,构建时间是一条狗。有关影响的更多详细信息,请参阅此电子邮件线程

  1. 下一个最佳答案是,如果该项目被放弃,您可以修补 pom 以删除存储库定义并将修补的 pom 和未更改的 jar 重新上传到 Maven Central。请参阅将工件上传到中央存储库的指南

避免这些选项

这里的所有其他选项都是一个 hack,选择其中任何一个选项将意味着其他所有人都需要进行相同的更改来解决问题。

  1. 通过在您的settings.xml文件中禁用它来将存储库列入黑名单。不幸的是,存储库没有唯一标识符。repository > id字段可以是创建 pom 的人定义的任何内容,因此可以使用不同的 id 引用相同的存储库 url。要查找使用-X选项运行的 id,调试输出应列出存储库 id。使用类似这样的东西来禁用它:
<repository>
  <releases>
    <enabled>false</enabled>
  </releases>
  <id>the repo id from X here</id>
  <name>the repo's name</name>
  <url>the repo's url</url>
</repository>
  1. 强制存储库改为使用镜像。很像 3,但将损坏的存储库重定向到另一个。
<mirror>
  <id>Another Mirror</id>
  <url>url to mirror</url>
  <mirrorOf>id of broken repo</mirrorOf>
</mirror>
  1. 强制存储库使用本地Maven 存储库管理器(即使在您的笔记本电脑上)。这是,无论谁在 pom 中滥用存储库,Maven 只会联系您本地的 MRM,并避免为每个定义的 repo 建立多个缓慢的网络连接。
<mirror>
  <id>Local MRM</id>
  <url>url to MRM</url>
  <!-- Mirror EVERYTHING to your MRM -->
  <mirrorOf>*</mirrorOf>
</mirror>
于 2014-12-20T01:02:39.040 回答