首页 文章

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

提问于
浏览
420

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

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

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

现在,我理解这意味着什么, and can simply re-run my command with -U, and things usually work fine from there on out .

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

我想弄清楚是否有一些地方我可以修改这个 update interval 设置 .

  • 此错误消息中提到的 update interval 是客户端还是服务器端设置?

  • 如果是客户端,我该如何配置?

  • 如果是服务器端,是否有人知道Nexus / Artifactory如何/是否公开这些设置?

12 回答

  • 0

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

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

  • 7

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

  • 2

    我有一个相关的问题,但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>
    
  • 2

    根据设置reference

    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>
    
  • 97

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

    Resolution :

    要么使用

    mvn -U clean install
    

    where -U will force update the 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>
    

    in your settings.xml

  • 8

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

    这也适用于Maven 3 .

  • 3

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

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

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

  • 213

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

  • 57

    我是怎么得到这个问题的

    当我从Eclipse Juno更改为Luna,并从SVN repo检出我的maven项目时,我在构建应用程序时遇到了同样的问题 .

    我尝试了什么?我尝试了干净的本地存储库,然后使用-U选项再次更新所有版本 . 但我的问题还在继续 .

    然后我转到Window - > Preferences - > Maven - > User Settings - >并单击Local Repository下的Reindex按钮并等待reindex发生 .

    就是这样,问题得到了解决 .

  • 29

    如果您使用Nexus作为代理仓库,则它具有“未找到缓存TTL”设置,默认值为1440分钟(或24小时) . 降低此值可能会有所帮助(存储库>配置>过期设置) .

    有关详细信息,请参阅documentation .

  • -1

    有些相关......我得到了

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

    此错误是由于意外使用 Maven 3 而不是 Maven 2 引起的 . 只是想到它可能会节省一些时间,因为我最初的谷歌搜索引导我到这个页面 .

  • 22

    在Eclipse中:

    • 右键单击项目 - >运行方式 - > Maven构建 - >将目标指定为"clean install" - >>必需的工件将下载到本地存储库 .

      • Build SUCCESS !! - >右键单击Project-> Maven - > Update Project(选中clean) .

相关问题