Maven 依赖关系报告:避免 (Glassfish) 存储库的延迟和错误消息



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

就我而言,它还尝试检查 AFAIK 废弃的 maven.glassfish.org 存储库。但是由于它仍然在一些使用的依赖项 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目标没有显示此存储库,但是当我搜索所有缓存的POM文件时,我看到<id>glassfish-repository</id> com.sun.jersey:jersey-server:1.8

选择以下选项之一:

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

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

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

避免这些选项

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

  1. 通过在设置.xml文件中禁用存储库,将存储库列入黑名单。不幸的是,存储库没有唯一标识符。存储库> id 字段可以是创建 pom 的人定义的任何内容,因此可以使用不同的 id 引用相同的存储库 URL。要查找 id,请使用 -X 选项运行,调试输出应列出存储库 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,并避免为每个定义的存储库提供多个慢速网络连接。
<mirror>
  <id>Local MRM</id>
  <url>url to MRM</url>
  <!-- Mirror EVERYTHING to your MRM -->
  <mirrorOf>*</mirrorOf>
</mirror>

最新更新