development

maven이 "MyRepo의 업데이트 간격이 경과 할 때까지 해결을 다시 시도하지 않습니다"라고 말하면 해당 간격은 어디에 지정됩니까?

big-blog 2020. 2. 12. 23:38
반응형

maven이 "MyRepo의 업데이트 간격이 경과 할 때까지 해결을 다시 시도하지 않습니다"라고 말하면 해당 간격은 어디에 지정됩니까?


maven을 사용하여 저장소에 아직 구축하지 않았거나 포함하지 않은 타사 저장소에서 나오는 인공물을 때리는 경우가 있습니다.

Maven 클라이언트에서 아티팩트를 찾을 수 없다는 오류 메시지가 표시됩니다.

http://myrepo:80/artifactory/repo로컬 저장소에 org.jfrog.maven.annomojo : maven-plugin-anno : jar : 1.4.0을 찾지 못한 경우 MyRepo 의 업데이트 간격이 경과하거나 업데이트가 강제 실행될 때까지 해결이 재 시도되지 않습니다. 도움말 1]

이제 나는 무엇을이 방법을 이해하고, 단순히 내 명령을 다시 실행 할 수 있습니다 -U, 일반적으로 물건 잘 작동 밖으로 거기에서 .

그러나이 오류 메시지는 매우 직관적이지 않으며 동료들에게 두통을 줄이려고합니다.

update interval설정을 수정할 수있는 곳이 있는지 알아 내려고 합니다.

  1. 는 IS update interval이 오류 메시지가 클라이언트 측 또는 서버 측 설정에서 언급되는?
  2. 클라이언트 측인 경우 어떻게 구성합니까?
  3. 서버 측이라면 누구나 Nexus / Artifactory에서 이러한 설정을 노출하는 방법을 알고 있습니까?

로컬 리포지토리에서 이슈를 다운로드하지 못한 해당 디렉토리를 삭제 하여이 문제를 해결했습니다. 다음에 maven 명령을 실행할 때 아티팩트 다운로드가 다시 트리거됩니다. 따라서 클라이언트 측 설정이라고 말하고 싶습니다.

Nexus 쪽 (서버 저장소 쪽)에서이 문제는 예약 된 작업을 구성하여 해결되었습니다. 클라이언트 측에서는 -U이미 지적했듯이을 사용하여 수행 됩니다.


로컬 저장소에서 해당 실패한 아티팩트 디렉토리를 삭제할 수 있습니다. 또한 -U목표에서 간단히 사용할 수 있습니다 . 작업을 수행합니다. 이것은 maven 3에서 작동합니다. 따라서 maven 2로 다운 그레이드 할 필요가 없습니다.


관련 문제가 있었지만 Raghuram의 답변이 도움이되었습니다. (나는 아직 그의 대답을 투표 할만큼 평판이 충분하지 않다). NetBeans와 함께 번들로 제공되는 Maven을 사용하고 있는데 동일한 "... 로컬 리포지토리에 캐시되었습니다. 넥서스의 업데이트 간격이 경과하거나 업데이트가 강제 실행될 때까지 확인이 다시 시도되지 않습니다-> [도움말 1]"오류 .

이 문제를 해결하기 위해 <updatePolicy>always</updatePolicy>설정 파일 (C : \ Program Files \ NetBeans 7.0 \ java \ maven \ conf \ settings.xml)에 추가했습니다.

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

기본적으로 발생하는 것은 maven의 기본 updatePolicy에 따라 Maven은 매일 저장소에서 항아리를 가져 오는 것입니다. 따라서 첫 번째 시도 중에 인터넷이 작동하지 않으면 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에서


설정 참조 에 따르면 :

updatePolicy : 이 요소는 업데이트 발생 빈도를 지정합니다. Maven은 리포지토리의 maven-metadata 파일에 저장된 로컬 POM의 타임 스탬프를 원격과 비교합니다. 항상, 매일 (기본값), 간격 : 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>

@ Sanjeev-Gulgani가 제안한대로 새로 설치 (캐시 된 종속성을 재정의) 하여이 문제를 해결할 수는 있지만 mvn -U clean install

문제를 일으키는 캐시 된 종속성을 간단히 제거 할 수도 있습니다.

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

자세한 내용은 mvn docs 를 참조하십시오.


이 오류는 때때로 오도 될 수 있습니다. 확인해야 할 2 가지 사항 :

  1. 리포지토리의 종속성에 대한 실제 JAR이 있습니까? 오류 메시지에 검색중인 URL이 포함되어 있으므로 해당 URL로 이동 한 다음 종속성과 일치하는 폴더를 찾으십시오. 항아리가 있습니까? 그렇지 않은 경우 종속성을 변경해야합니다. (예를 들어, 하위 프로젝트를 가리켜 야 할 때 최상위 부모 의존성을 가리킬 수 있습니다)

  2. jar이 원격 저장소에 있으면 로컬 사본을 삭제하십시오. .m2 / repository (ls -a-Linux의 경우 숨겨져 표시됨) 아래 홈 디렉토리에 있습니다 (다르게 구성하지 않은 경우).


Eclipse를 사용하는 경우 Windows-> 환경 설정-> Maven으로 이동하여 "원격 저장소의 종속성을 자동으로 업데이트하지 마십시오"확인란을 선택 취소하십시오.

이것은 Maven 3에서도 작동합니다.


저장소에서 모든 "_maven.repositories"파일을 삭제해야합니다.


Nexus를 프록시 리포지토리로 사용하는 경우 "Not Found Cache TTL"설정이 기본값 1440 분 (또는 24 시간)으로 설정됩니다. 이 값을 낮추면 도움이 될 수 있습니다 (리포지토리> 구성> 만료 설정).

자세한 내용은 설명서참조하십시오 .


제목 질문에 최종 답변 : (프로젝트, 프로필 또는 설정)의 (클라이언트 쪽 설정)

[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분 (~ "일일")입니다.

참조 : DefaultUpdatePolicyAnalyzer , DefaultMetadataResolver # resolveMetadata ()RepositoryPolicy


로컬 maven 저장소에서 관련 종속성을 삭제 한 후에 작동합니다.

/user/.m2/repository/path

이 문제가 어떻게 발생합니까?

Eclipse Juno에서 Luna로 변경하고 SVN 저장소에서 maven 프로젝트를 체크 아웃 할 때 응용 프로그램을 빌드하는 동안 동일한 문제가 발생했습니다.

내가 무엇을 시도 했습니까? 깨끗한 로컬 저장소를 시도한 다음 -U 옵션을 사용하여 모든 버전을 다시 업데이트했습니다. 그러나 나의 문제는 계속되었다.

그런 다음 Window-> Preferences-> Maven-> User Settings->로 가서 Local Repository 아래 Reindex 버튼을 클릭하고 reindex가 발생할 때까지 기다립니다.

그게 다야 문제가 해결되었습니다.


내 경우에는 솔루션이 어리 석었습니다. 종종 종속성 버전이 잘못되었습니다.


다소 관련이 있습니다.

"[오류] 프로젝트 testproject에서 목표를 실행하지 못했습니다 : 프로젝트 myjarname : jar : 1.0-0에 대한 종속성을 해결할 수 없습니다. myjarname-core : bundle : 1.0-0을 찾을 수없는 오류가 http://repo1.maven.org/maven2로컬 저장소에 캐시되었습니다. 중앙의 업데이트 간격이 경과하거나 업데이트가 강제 실행될 때까지 다시 시도-> [도움말 1] "

이 오류는의 Maven 3대신 실수로 사용하여 발생한 것입니다 Maven 2. 내 초기 Google 검색으로 인해이 페이지로 연결되었으므로 누군가 시간을 절약 할 수 있다고 생각했습니다.


Maven에는 리포지토리의 업데이트를 확인하거나 리포지토리를 원격과 동기화하는 빈도를 지정하기위한 updatePolicy 설정이 있습니다.

  • updatePolicy의 기본값은 매일입니다.
  • 다른 값은 항상 / 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>

참고 URL : https://stackoverflow.com/questions/4856307/when-maven-says-resolution-will-not-be-reattempted-until-the-update-interval-of



반응형