使用maven,我偶尔会遇到来自第三方回购的工件,这些工件我还没有构建或包含在我的存储库中。

我将从maven客户端得到一个错误消息,说无法找到工件:

无法找到org.jfrog.maven.annomojo:maven-plugin-anno:jar:1.4.0 在http://myrepo:80/artifactory/repo中缓存在本地 存储库,解析将不会重新尝试,直到更新 MyRepo的时间间隔已过或更新被强制->[帮助1]

现在,我明白了这意味着什么,并且可以简单地用-U重新运行我的命令,从那时起,事情通常都能正常工作。

然而,我发现这个错误消息非常不直观,我试图让我的同事们不那么头疼。

我试图弄清楚是否有一些地方,我可以修改这个更新间隔设置。

此错误消息中提到的更新间隔是客户端设置还是服务器端设置? 如果是客户端,如何配置? 如果是服务器端,有人知道Nexus/Artifactory如何公开这些设置吗?


当前回答

我在另一件藏物上也犯了类似的错误。

<……>已缓存在本地存储库中,将不会重新尝试解析 直到中央的更新间隔已过或强制更新

以上所描述的解决方案对我都不起作用。我最终在IntelliJ IDEA解决了这个问题 文件>无效缓存/重启…>无效并重启。

其他回答

我曾经通过删除本地repo中对应的无法下载的工件目录来解决这个问题。下次运行maven命令时,将再次触发工件下载。因此,我认为这是一个客户端设置。

Nexus端(服务器回收端),此问题是通过配置定时任务解决的。 客户端,这是使用-U完成的,正如您已经指出的那样。

Maven具有updatePolicy设置,用于指定检查存储库中的更新或保持存储库与远程同步的频率。

updatePolicy的默认值为每日。 其他值可以是always / never/ XX(以分钟为单位指定间隔)。

下面的代码示例可以添加到maven用户设置文件以配置updatePolicy。

<pluginRepositories>
    <pluginRepository>
        <id>Releases</id>
        <url>http://<host>:<port>/nexus/content/repositories/releases/</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>             
</pluginRepositories>

有些有关. .我正在

"[错误]未能在项目testproject上执行目标:无法解决项目myjarname:jar:1.0-0的依赖:在http://repo1.maven.org/maven2中无法找到myjarname-core:bundle:1.0-0在本地存储库中缓存,在中央更新间隔已经过或强制更新之前将不会重新尝试解决->[帮助1]"

此错误是由于意外地使用Maven 3而不是Maven 2引起的。只是觉得这可能会节省一些时间,因为我最初的谷歌搜索把我带到了这个页面。

在我的私有存储库上上传第三方库时,我也遇到了同样的问题。有时所描述的修复方法对我有效,但有时无效。

我认为问题的根本原因是工件缺少pom.xml文件。(第三方工件的pom.xml,而不是项目中的pom.xml)。我假设Maven期望每个工件都是pom.xml,因此它可以解析所有工件的依赖关系。有时没有pom.xml也能工作,但有时不能(我没有确定,什么时候不能)。

我使用Nexus3作为私有存储库。当您上传一个工件时,您可以选中一个选项来为工件生成一个pom.xml文件。

我有同样的错误,(解决将不会重新尝试…),但我有不同的需求,因为我在我的本地存储库中有文件,目前不能远程使用(旧的过时的库和内部库),我的公司nexus系统宕机,但它们确实存在于我的.m2回购。

Maven仍然拒绝构建,产生了上面相同的错误。

对于有问题的库,我只是删除了相应的文件:

_remote.repositories 例如:users\[username]\。m2 \[冒犯jar \ [versionnumber] \ _remote.respositories路径)

知道这些文件只在本地可用。

注意:长期解决方案,我可能应该启动并运行我们以前的nexus系统,对于那些遗留的jar,将它们检入到项目的lib文件夹下(或类似的东西)。