当maven说"在MyRepo的更新间隔已经过去之前不会重新尝试解析",指定的间隔在哪里?

cpr*_*404 521 artifactory maven

有了maven,我偶尔会看到一些来自我尚未构建或包含在我的存储库中的第三方存储库的工件.

我将从maven客户端收到一条错误消息,指出无法找到工件:

未能找到org.jfrog.maven.annomojo:maven-plugin-anno:jar:1.4.0 in http://myrepo:80/artifactory/repo缓存在本地存储库中,在MyRepo的更新间隔过去或强制更新之前,不会重新尝试解析 - > [帮助1]

现在,理解这意味着什么,并且可以简单地重新运行我的命令-U,并且通常在那里工作正常.

但是,我发现这个错误信息非常不直观,并且试图让我的同事们感到头疼.

我想知道是否有一些地方可以修改此update interval设置.

  1. update interval此错误消息的客户端或服务器端的设置,被提及?
  2. 如果是客户端,我该如何配置呢?
  3. 如果是服务器端,是否有人知道如何/如果Nexus/Artifactory公开这些设置?

Chr*_*lli 253

我曾经通过删除我本地仓库中相应的下载工件目录来解决这个问题.下次我运行maven命令时,会再次触发工件下载.因此,我认为这是客户端设置.

Nexus方面(服务器回购方),此问题解决了配置计划任务的问题.客户端,-U正如您已经指出的那样,这是使用完成的.

  • 如果Maven注意到缓存的工件是无效的,为什么它不能单独解决? (11认同)
  • "我通过删除本地仓库中相应的无法下载工件目录来解决此问题." 这对我有用.我也在使用Netbeans. (7认同)
  • 这并没有回答OP的实际问题. (6认同)

kds*_*kds 107

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

  • 请在回答之前仔细阅读问题.OP询问如何设置时间间隔,而不是如何强制更新. (8认同)
  • 既然存储库配置如此简单,为什么还要搞乱它呢? (2认同)
  • 这不是问题的答案,而是人们遇到这种异常时需要的东西。因为当您在进行本地库开发时,最好是删除此类库,而不要让间隔使您感到困惑。 (2认同)

MrD*_*ews 61

我有一个相关的问题,但Raghuram的答案有所帮助.(我还没有足够的声誉来表达他的答案).我正在使用与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>
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下没有帮助. (6认同)

San*_*ani 46

基本上发生的是,根据maven.Maven的默认updatePolicy将每天从repo获取罐子.所以如果在第一次尝试期间你的互联网没有工作那么它将不会尝试再次获取这个罐子直到24小时花费.

解析度 :

要么使用

mvn -U clean install
Run Code Online (Sandbox Code Playgroud)

其中-U将强制更新回购

或使用

<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>
Run Code Online (Sandbox Code Playgroud)

在您的settings.xml中

  • 是什么样的傻瓜才认为这是明智的违约? (2认同)

Rag*_*ram 36

根据设置参考:

updatePolicy:此元素指定更新应尝试发生的频率.Maven会将本地POM的时间戳(存储在存储库的maven-metadata文件中)与远程数据进行比较.选项包括:always,daily(默认),interval:X(其中X是以分钟为单位的整数)或从不.

例:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢回复; 但是,我已经用"updatePolicy"设置进行了相当多的实验,它似乎对"未找到"/"失败缓存"/"分辨率不会重新尝试"错误没有影响. (6认同)

sfl*_*che 14

尽管您可以通过全新安装(覆盖所有缓存的依赖项)来解决此问题,如@ Sanjeev-Gulgani建议的那样 mvn -U clean install

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

mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见mvn文档

  • 但为什么 Maven 会中止构建呢?为什么它不只采用本地存储库中缓存的依赖项?为什么你必须删除它才能让 Maven 获取它?! (3认同)

Mat*_*ttC 9

此错误有时会产生误导.您可能想要检查的两件事:

  1. 回购中的依赖是否有实际的JAR?您的错误消息包含其搜索位置的URL,因此请转到该位置,然后浏览到与您的依赖项匹配的文件夹.有罐子吗?如果没有,您需要更改您的依赖项.(例如,当您应该指向子项目时,您可能指向顶级父依赖项)

  2. 如果远程仓库上存在jar,则只需删除本地副本即可.它将位于您的主目录中(除非您配置不同)在.m2/repository(ls -a以显示隐藏在Linux上).

  • 这与OP的问题无关.显示错误的原因不是重点.OP想知道如何设置重试间隔. (4认同)

小智 9

这在您从本地 Maven 存储库中删除相关依赖项后有效

/user/.m2/repository/path
Run Code Online (Sandbox Code Playgroud)


小智 7

如果您使用的是Eclipse,请转到Windows - > Preferences - > Maven,然后取消选中"不要自动更新远程存储库中的依赖项"复选框.

这也适用于Maven 3.

  • 这不符合OP的问题. (8认同)

小智 6

我对不同的工件有类似的错误。

<...> 已缓存在本地存储库中,直到 Central 的更新间隔已过或强制更新后,才会重新尝试解析

上述解决方案都不适合我。我终于在IntelliJ IDEA 中通过 File > Invalidate Caches / Restart ... > Invalidate and Restart解决了这个问题。


Ria*_*adh 5

您需要从存储库中删除所有“ _maven.repositories”文件。

  • 没有帮助,或者至少对我而言没有帮助 (3认同)