在我的基础项目中,我使用了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版本,我不想改变它。
答案 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,才能使此解决方案正常工作。