最后回答标题问题:它是(客户端设置)在(项目,配置文件或设置)
[plugin]?[r|R]epository/[releases|snapshots]/updatePolicy
... 标签。
(目前,maven: 3.6.0,但我认为“远远向后”兼容)可能的值是:
/**
*从不更新本地缓存数据。
* /
UPDATE_POLICY_NEVER = "never";
/**
*总是更新本地缓存的数据。
* /
public static final String UPDATE_POLICY_ALWAYS = "always";
/**
*每天更新一次本地缓存数据。
* /
UPDATE_POLICY_DAILY = "每日";
/**
*更新本地缓存数据**每X分钟**由“interval:X”给出。
* /
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策略)
{
int分钟;
试一试
{
字符串s = policy。substring(RepositoryPolicy.UPDATE_POLICY_INTERVAL.length() + 1);
minutes =整数。valueOf(s);
}
catch (RuntimeException)
{
分钟= 24 * 60;
记录器。警告("不可解析的存储库更新策略'{}',假设'{}:1440'",
政策,RepositoryPolicy。UPDATE_POLICY_INTERVAL);
}
返回分钟;
}
...其中lastModified是(本地文件)一个/每个底层工件的“修改时间戳”。
特别是对于interval:x设置:
冒号:并不是那么严格——任何“非空”字符都可以这样做(=,,…)。
x < 0的负值应该屈服于"never"。
我假设是“分钟”(0-59秒)。或以上…)区间。
数字格式异常导致24 * 60分钟(~“daily”)。
..参见:DefaultUpdatePolicyAnalyzer, DefaultMetadataResolver#resolveMetadata()和RepositoryPolicy