当Maven说“在MyRepo的更新间隔过去之前不会重试解析”时,这个间隔是在哪里指定的?

kx7yvsdv  于 2022-09-20  发布在  Maven
关注(0)|答案(24)|浏览(614)

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

我将从maven客户端收到一条错误消息,指出找不到构件:
未能在本地存储库中缓存http://myrepo:80/artifactory/repo中的org.jfrog.maven.annomojo:maven-plugin-anno:jar:1.4.0,在MyRepo的更新间隔过后或强制更新之前,不会重试解析->[帮助1]

现在,明白了这意味着什么,并且只需用-U重新运行我的命令,从那时起,事情通常都很正常

然而,我发现这个错误信息非常不直观,我正在努力让我的同事省去一些头疼的问题。

我想知道是否有什么地方可以修改这个update interval设置。

1.此错误消息中提到的update interval是客户端设置还是服务器端设置?
1.如果是客户端,如何配置?
1.如果是服务器端,有人知道Nexus/ArtiFactory如何/是否公开这些设置吗?

f5emj3cl

f5emj3cl16#

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

f87krz0w

f87krz0w17#

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

这也适用于Maven 3。

qlfbtfca

qlfbtfca18#

这个错误有时会产生误导。你可能需要检查两件事:

1.回购中的依赖项是否有实际的JAR?您的错误消息包含搜索位置的URL,因此请转到此处,然后浏览到与您的依赖项匹配的文件夹。有jar吗?如果不是,则需要更改依赖项。(例如,当您应该指向子项目时,您可以指向顶级父依赖项)
1.如果远程Repo上存在JAR,则只需删除您的本地副本。它将位于您的主目录中(除非您进行了不同的配置),位于.m2/store(ls-a,如果在Linux上则显示隐藏)下。

kulphzqa

kulphzqa19#

在从本地maven存储库中删除相关依赖项后,此操作将起作用

/user/.m2/repository/path
eivgtgni

eivgtgni20#

根据设置reference

**updatePolicy:**此元素指定应该尝试进行更新的频率。Maven会将本地POM的时间戳(存储在存储库的maven元数据文件中)与远程POM进行比较。选项包括:Always、Daily(默认)、Interval:X(其中X为分钟整数)或Never。

示例:

<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>
1qczuiv0

1qczuiv021#

虽然您可以像@Sanjeev-Gulgani用mvn -U clean install建议的那样,通过全新安装(覆盖任何缓存的依赖项)来解决这个问题

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

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

有关详细信息,请参阅mvn docs

k97glaaz

k97glaaz22#

我有一个相关的问题,但拉古拉姆的回答有帮助。(我还没有足够的声誉来支持他的答案)。我正在使用与NetBeans捆绑在一起的Maven,并收到相同的错误:“...已缓存在本地存储库中,解析将不会重试,直到nexus的更新间隔已过或强制更新->[Help 1]”。

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

<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>
nwwlzxa7

nwwlzxa723#

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

lskq00tm

lskq00tm24#

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

解决方案:

要么使用

mvn -U clean install

其中-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>

在settings.xml中

相关问题