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


587

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에서 이러한 설정을 노출하는 방법을 알고 있습니까?

11
내 pom.xml에 1을 더 추가 한 후에도 같은 오류 메시지가 나타납니다. 나에게 이것은 분명히 버그입니다. 왜 이런 일이 발생하는지 이해할 수 없습니다! 프로젝트에 종속성을 추가하고 mvn compile을 실행하면 jar 파일을 다운로드해야합니다. 이 행동은 완전히 말도 안됩니다!
Robert Reiz 2016 년


나는 최근에 이것을 경험했으며 내가 읽은 모든 대답 후에 또 다른 추가 단계는 Eclipse 에서 프로젝트다시 가져 오는 것입니다 (필자의 경우). Eclipse가 내에없는 플러그인으로 나를 괴롭히는 것이 너무 이상했습니다 pom.xml.
시크릿

나에게 중요한 질문 !! 고마워 친구!
Mr. Noddy

나를 위해 특정 리포지토리가 GitHub에 연결되어 있고 URL이 오프라인 상태가되었습니다 (404를 얻음). 내부 서버로 리포지를 업데이트했는데 작동했습니다.
cbmeeks

답변:


286

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

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


7
"로컬 리포지토리에서 아티팩트 디렉토리를 다운로드하지 못했습니다." 이것은 나를 위해 일했습니다. Netbeans도 사용하고 있습니다.

16
Maven이 캐시 된 아티팩트가 유효하지 않다고 언급하면 ​​왜 스스로 해결할 수 없습니까?
Stefan

1
"예약 된 작업 구성"이란 무엇이며 "-U를 사용하여 수행됩니다"라는 의미는 무엇입니까? 객관적인 Eclipse UI 용어에 넣을 수 있습니까?
user2568374

1
Eclipse IDE를 의미한다고 가정합니다. 이론은 최신 SNAPSHOT을 다운로드해야한다는 것입니다. 이를 위해서는 maven 명령에 '-U'매개 변수를 추가해야합니다 (예 : mvn clean compile -U). 이제 '항상 업데이트 스냅 샷'상자를 선택하여 명령 행 또는 Eclipse를 통해이 maven 명령을 실행할 수 있습니다. 확실하지 않습니다, 나는 요즘 인텔리를 사용합니다. '예약 된 작업 구성'부분은 Nexus 서버에서 원하는 특정 구성을 나타냅니다. 후자는 Eclipse와 아무 관련이 없습니다.
Christian Achilli

10
OP의 실제 질문에 대한 답변은 아닙니다.
8bitjunkie

116

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


2
리포지토리 구성이 그렇게 간단 할 수있는 이유는 무엇입니까?
Koraktor

9
답변하기 전에 질문을주의 깊게 읽으십시오. OP는 강제 업데이트 방법이 아니라 시간 간격을 설정하는 방법을 묻고 있습니다.
i3ensays

2
질문에 대한 대답은 아니지만 사람들이이 예외에 부딪 칠 때 필요한 것입니다. 로컬 lib 개발 작업을 할 때 간격을 혼동하지 않고 해당 lib를 삭제하는 것이 가장 좋습니다.
mcvkr

~/.m2/settings.xml/<repositories>-U 옵션으로이 문제를 해결하려면 유효한 리포지토리를 추가해야합니다
Kanagavelu Sugumar

64

관련 문제가 있었지만 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>

8
내 경우에는 도움이되지 않았습니다.
arcy

64

기본적으로 발생하는 것은 maven의 기본 업데이트 정책에 따라입니다 .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에서


39

설정 참조 에 따르면 :

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>

7
답장을 보내 주셔서 감사합니다; 그러나 "updatePolicy"설정을 사용하여 약간의 실험을 수행 한 결과 "Not Found"/ "Failure Cached"/ "Resolution 시도되지 않음"오류에 영향을 미치지 않는 것 같습니다.
cprice404

23

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

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

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

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


9

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

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

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


4
이것은 OP의 질문과 관련이 없습니다. 오류가 표시되는 이유는 중요하지 않습니다. OP는 재시도 간격을 설정하는 방법을 알고 싶어합니다.
8bitjunkie

1
이것은 OP의 게시물 뒤에 암시 적 인 문제 일 수 있으며 내 문제로 밝혀졌습니다. 옵션 1을 검토하여 올바른 길로 안내하는 <groupId>에 오타가 있음이 밝혀졌습니다.
James Oravec

1
문제는 간격을 설정하는 방법입니다.
smilyface

7

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

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


1
일식 : Juno Service Release 2. m2e : v 1.3.1
user77115

8
이것은 OP의 질문에 대답하지 않습니다.
8bitjunkie

5

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


3
도움이되지 않거나 적어도 내 경우에는
arcy

1
그것은 나를 위해 일했다. 하지만 특정 종속성 폴더에있는 파일 만 삭제하지는 않았습니다.
Piyin

5

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

/user/.m2/repository/path

이것은 매력처럼 작동합니다
Jadda

3

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

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


2

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

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

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

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

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


4
이것은 OP의 질문에 대답하지 않습니다.
8bitjunkie

2

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

[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


1

대한 인 IntelliJ 사용자 다음은 나를 위해 일한 :

패키지를 마우스 오른쪽 버튼으로 클릭하십시오

Maven > Reimport 

Maven > Generate Sources and Update Folders

0

다소 관련이 있습니다.

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

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


2
프로젝트에서 Maven 3을 사용하도록하려면 어떻게해야합니까? 두 버전 사이에 무엇이 바뀌 었는지에 대한 단서가 있습니까?
Xr.

1
이것이 바로 내 문제였습니다. Maven 3이 2와 왜 다른지 잘 모르겠습니다.이 게시물을 게시하고 솔루션 검색에 더 이상 시간을 낭비하지 않아도됩니다.
CatsAndCode

maven3 대신 maven2를 설치하는 방법?

매우 일반적인 질문입니다. 어떤 운영 체제입니까? 우분투의 경우 "sudo apt-get install maven2"... 또는 모든 Linux / UNIX의 경우 아카이브를 다운로드하여 직접 컴파일하여 경로에 추가 할 수 있습니다. 시도 : shameerarathnayaka.blogspot.com/2012/01/…
sdanzig

이것은 나를 위해 일했고 실제로 여기에대답에서 이것으로 다시 연결 됩니다 .
shiri

0

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>

3
이것은 OP의 질문에 대답하지 않습니다. OP는 문제가 무엇인지, 로컬 m2 저장소를 업데이트하는 방법을 이해하고 있음을 분명합니다. OP는 간격의 위치와 변경 방법을 묻습니다. IDE에 대한 언급은 전혀 없습니다. 질문을 읽지 않았습니다.
8bitjunkie

@ 8bitjunkie 이것은 바로 질문에 직접 대답 If client-side, how do I configure it?합니다. 이 답변은 IDE 기능에 관한 것이 아닙니다. mvn only 저장소 구성입니다. 는 updatePolicy영업 이익에 대해 요구하고있다 간격입니다.
montrivo

이것은 @ cprice404의 대답으로 받아 들여질 수 있습니다.
montrivo


0

나는이 문제가 있었고 이것에 제안 된 포괄적 인 설명 이 있었다 를 해결하는 데 도움 되었습니다.

두 번째로 선언 된 문제는 내 문제였습니다. 방금 추가 한 타사 저장소를 사용하여 repository프로젝트의 pom 파일 일부를 수행했습니다 . pluginrepository이 문제를 해결하기 위해 동일한 리포지토리 정보를 추가합니다 .


0

다른 이슈와 비슷한 오류가 발생했습니다.

<...>이 (가) 로컬 저장소에 캐시되었으며 중앙의 업데이트 간격이 경과하거나 업데이트가 강제 실행될 때까지 확인이 다시 시도되지 않습니다.

위에서 설명한 해결책 중 어느 것도 나를 위해 일하지 않았습니다. 마지막으로 IntelliJ IDEA 에서 파일> 캐시 무효화 / 재시작 ...> 무효화 및 재시작 으로이 문제를 해결했습니다 .


0

제 경우에는 여러 프로젝트가있었습니다

rootProject
 |-> contractProject (using Project Lombok)
 |-> domainProject (dependency on contractProject)

"domainProject"디렉토리에서 "mvn clean install"을 수행하면 오류가 발생합니다.

"projectRoot"디렉토리에서 "mvn clean install"을 수행했을 때 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.