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

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

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

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

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

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

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


当前回答

您可以在本地存储库中删除相应的失败工件目录。你也可以在目标中使用-U。它会起作用的。这适用于maven 3。所以不需要降级到maven 2。

其他回答

虽然你可以解决这个问题用一个干净的安装(覆盖任何缓存的依赖)@Sanjeev-Gulgani建议用mvn -U清洁安装

您还可以简单地删除导致问题的缓存依赖项

mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId"

更多信息请参见mvn文档。

基本上发生的情况是,根据maven的默认updatePolicy, maven将每天从repo中获取jar。因此,如果在第一次尝试期间,您的互联网不工作,那么它将不会尝试再次获取这个罐子,直到24小时过去。

解决方法:

要么使用

mvn -U clean install

(此处-U将强制更新repo)

或使用

<profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>myRepo</id>
          <name>My Repository</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
         </repository>
      </repositories>
      ...
    </profile>
  </profiles>

在你的settings.xml中

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

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

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

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

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

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

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

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

我有一个相关的问题,但拉格拉姆的回答帮了我。(我还没有足够的声誉来为他的答案投票)。我正在使用与NetBeans捆绑的Maven,并且得到了相同的“…被缓存在本地存储库中,在nexus的更新间隔已过或更新被强制之前不会重新尝试解析->[帮助1]"错误。

为了解决这个问题,我添加了<updatePolicy>always</updatePolicy>到我的设置文件(C:\Program Files\NetBeans 7.0\java\maven\conf\settings.xml)

<profile>
  <id>nexus</id>
  <!--Enable snapshots for the built in central repo to direct -->
  <!--all requests to nexus via the mirror -->
  <repositories>
    <repository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </repository>
  </repositories>
 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>