제목 질문에 최종 답변 : (프로젝트, 프로필 또는 설정)의 (클라이언트 쪽 설정)
[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
은 "never"가되어야합니다.
interval:0
"분"(0-59 초 이상) 간격으로 가정합니다.
- 숫자 형식 예외는
24 * 60
분 (~ "일일")입니다.
..See : DefaultUpdatePolicyAnalyzer , DefaultMetadataResolver # resolveMetadata () 및 RepositoryPolicy