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

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

使用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如何/是否公开这些设置吗?

at0kjp5o

at0kjp5o1#

如果您使用Nexus作为代理回购,则它会使用缺省值1440分钟(或24小时)的“Not Found Cache TTL”设置。降低此值可能会有所帮助(存储库>配置>过期设置)。

有关详细信息,请参阅documentation

yjghlzjz

yjghlzjz2#

确保您正在寻找的构件存在,如果它在您的本地项目运行中:cd..CD项目名称MVN全新安装

那么你会在当地吃到它。

要获得更好的实践,请执行以下操作:MVN干净部署,这样您就可以再次使用它,而不会出现此问题

oug3syen

oug3syen3#

我解决了!

我早些时候遇到过这个问题,在查看了一些评论后,它起到了作用。我们只需更正{m2_home}/.m2下的settings.xml文件


**<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>.m2/repository</localRepository>
<profiles>
    <profile>
      <repositories>
        <repository>
          <id>projectid</id>
          <url>http://localhost</url>
          <name>Project name</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
         </repository>
      </repositories>
    </profile>
  </profiles>
</settings>**

并执行maven干净安装命令。


**/maven_home/mvn -f project_directory/pom.xml -DskipTests clean install**
0vvn1miw

0vvn1miw4#

更改我的settings.xml中的本地存储库路径解决了这个问题

3mpgtkmj

3mpgtkmj5#

我在我的私人存储库上传第三方库时遇到了同样的问题。有时描述的修复方法对我有效,但有时不起作用。

我认为问题的根本原因是缺少构件的pom.xml文件。(第三方构件的pom.xml不是项目中的pom.xml)。我假设Maven希望每个构件都有一个pom.xml,这样它就可以解析所有构件的依赖关系。有时它在没有pom.xml的情况下可以工作,但有时不能(我还没有确定,但它不能)。

我使用Nexus3作为私有存储库。当您上传一个构件时,您可以选中一个选项来为该构件生成pom.xml文件。

uqcuzwp8

uqcuzwp86#

我有这个问题,this中提出的全面描述帮助我解决了它。

第二个公开的问题是我的问题。我使用了我刚刚添加的第三方存储库,在我的项目中执行pom文件的repository部分。我将相同的存储库信息添加到pluginrepository中以解决此问题。

9ceoxa92

9ceoxa927#

我也犯了同样的错误,(不会重新尝试解决问题...)但我有不同的要求,因为我在本地存储库中有文件,目前无法远程访问(旧的过时的库和内部库),我的公司Nexus系统停机,但它们确实存在于我的.m2repos中。

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

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

示例路径:USERS[用户名].m2[违规JAR路径][版本号]_emote.respositories

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

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

brccelvz

brccelvz8#

有点相关..我得到的是
“[错误]无法对项目执行目标测试项目:无法解析项目的依赖项myjarname:jar:1.0-0:无法在本地存储库中找到http://repo1.maven.org/maven2中的myjarname-core:Bundle:1.0-0,在中心的更新间隔过去或强制更新之前,不会重试解析->[Help 1]”

此错误是由于意外使用Maven 3而不是Maven 2造成的。我只是想这可能会节省一些人的时间,因为我最初的谷歌搜索将我带到了这个页面。

yks3o0rb

yks3o0rb9#

在我的例子中,解决方案很愚蠢:我只是有不正确的依赖项版本。

vuv7lop3

vuv7lop310#

Maven有更新策略设置,用于指定检查存储库中更新的频率或使存储库与远程保持同步。

  • updatPolicy的默认值为Daily。
  • 其他值可以是Always/Never/XX(以分钟为单位指定间隔)。

下面的代码示例可以添加到maven用户设置文件中以配置updatPolicy。

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

fcg9iug311#

最后回答标题问题:它在(项目、个人资料或设置)中(客户端设置)

[plugin]?[r|R]epository/[releases|snapshots]/updatePolicy

..。标签。

(目前,maven:3.6.0,但我认为“向后”兼容)可能的值为:

/**
 * Never update locally cached data.
 */
public static final String UPDATE_POLICY_NEVER = "never";
/**
 * Always update locally cached data.
 */
public static final String UPDATE_POLICY_ALWAYS = "always";
/**
 * Update locally cached data once a day.
 */
public static final String UPDATE_POLICY_DAILY = "daily";
/**
 * Update locally cached data**every X minutes**as given by "interval:X".
 */
public static final String UPDATE_POLICY_INTERVAL = "interval";

此标记的当前(Maven 3.6.0)评估实现如下:

public boolean isUpdatedRequired( RepositorySystemSession session, long lastModified, String policy )
{
    boolean checkForUpdates;
    if ( policy == null )
    {
        policy = "";
    }
    if ( RepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
    {
        checkForUpdates = true;
    }
    else if ( RepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
    {
        Calendar cal = Calendar.getInstance();
        cal.set( Calendar.HOUR_OF_DAY, 0 );
        cal.set( Calendar.MINUTE, 0 );
        cal.set( Calendar.SECOND, 0 );
        cal.set( Calendar.MILLISECOND, 0 );
        checkForUpdates = cal.getTimeInMillis() > lastModified;
    }
    else if ( policy.startsWith( RepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
    {
        int minutes = getMinutes( policy );
        Calendar cal = Calendar.getInstance();
        cal.add( Calendar.MINUTE, -minutes );
        checkForUpdates = cal.getTimeInMillis() > lastModified;
    }
    else
    {
        // assume "never"
        checkForUpdates = false;
        if ( !RepositoryPolicy.UPDATE_POLICY_NEVER.equals( policy ) )
        {
            LOGGER.warn( "Unknown repository update policy '{}', assuming '{}'",
                    policy, RepositoryPolicy.UPDATE_POLICY_NEVER );
        }
    }
    return checkForUpdates;
}

..带有:

private int getMinutes( String policy )
{
    int minutes;
    try
    {
        String s = policy.substring( RepositoryPolicy.UPDATE_POLICY_INTERVAL.length() + 1 );
        minutes = Integer.valueOf( s );
    }
    catch ( RuntimeException e )
    {
        minutes = 24 * 60;
        LOGGER.warn( "Non-parseable repository update policy '{}', assuming '{}:1440'",
                policy, RepositoryPolicy.UPDATE_POLICY_INTERVAL );
    }
    return minutes;
}

...其中lastModified是一个/每个底层构件的(本地文件)“修改时间戳”。

尤其是对于interval:x设置:

  • 冒号:并不严格--任何“非空”字符都可以这样做(=、``等)。
  • 负值x < 0应让位于“永不”。
  • interval:0我认为是“每分钟”(0-59秒。或以上...)间隔时间。
  • 数字格式异常导致24 * 60分钟(~“每天”)。

..请参阅:DefaultUpdatePolicyAnalyzer、DefaultMetadataResolver#solveMetadata()和RepositoryPolicy

7hiiyaii

7hiiyaii12#

我是怎么遇到这个问题的,

当我从Eclipse Juno更改为露娜,并从SVN repo checkout 我的maven项目时,我在构建应用程序时遇到了同样的问题。

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

然后,我转到窗口-->首选项->Maven-->用户设置-->并单击本地存储库下的Reindex按钮,等待重新索引发生。

仅此而已,问题解决了。

t3psigkw

t3psigkw13#

我过去常常通过删除本地repo中相应的失败下载构件目录来解决这个问题。下次运行maven命令时,将再次触发构件下载。因此,我会说这是一个客户端设置。

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

vsaztqbk

vsaztqbk14#

对于IntelliJ用户,以下方法对我有效:

右键单击您的包

Maven > Reimport

Maven > Generate Sources and Update Folders
zzwlnbp8

zzwlnbp815#

我对另一件艺术品也犯了类似的错误。
已在本地存储库中缓存,在已过中心的更新间隔或强制更新之前,将不会重试解析.

上面描述的解决方案对我来说都不起作用。我最终在IntelliJ Idea中通过文件>无效缓存/重新启动...>无效并重新启动解决了这个问题。

相关问题