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

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

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

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

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

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

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


当前回答

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

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

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

更多信息请参见mvn文档。

其他回答

确保您正在寻找的工件是存在的,如果它在您的本地项目运行: cd . . CD项目名称 MVN清洁安装

然后你就可以在当地吃了。

为了更好的练习,请: MVN清洁部署,因此您可以再次使用它而不会出现此问题

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

Is there an actual JAR for the dependency in the repo? Your error message contains a URL of where it is searching, so go there, and then browse to the folder that matches your dependency. Is there a jar? If not, you need to change your dependency. (for example, you could be pointing at a top level parent dependency, when you should be pointing at a sub project) If the jar exists on the remote repo, then just delete your local copy. It will be in your home directory (unless you configured differently) under .m2/repository (ls -a to show hidden if on Linux).

基本上发生的情况是,根据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中

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>

根据设置参考:

updatePolicy:该元素指定更新尝试发生的频率。Maven将比较本地POM的时间戳(存储 在存储库的maven-元数据文件中)到远程。选项是: 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>