Maven이 로컬 아티팩트를 찾지 못함


107

때때로 maven은 로컬로 빌드되고 패키지 된 특정 종속성을 종속성으로 갖는 다른 프로젝트를 빌드하는 동안 로컬 저장소에서 찾을 수 없다고 불평합니다. 다음과 같은 오류가 발생합니다.

프로젝트 X에서 목표를 실행하지 못함 : 프로젝트 X에 대한 종속성을 해결할 수 없음 : [아카이브 저장소]에서 Y를 찾지 못해 로컬 저장소에 캐시되었습니다. 내부 업데이트 간격이 경과하거나 업데이트가 강제 실행될 때까지 해결을 다시 시도하지 않습니다. >

X는 빌드중인 프로젝트이고 Y는 누락 된 것으로 추정되는 아티팩트입니다. 로컬 저장소를 보면 아티팩트가 있습니다. 이 아티팩트는 우리의 archiva 저장소에 설치되지 않으므로 문제는 순전히 로컬 저장소에 있습니다.

settings.xml과 "mvn -U"에서 다양한 프로파일을 시도했습니다. 이 아티팩트는 로컬 저장소보다 더 멀리 가지 않기 때문에 좋은 일도해서는 안됩니다.

작동하는 것처럼 보이는 유일한 두 가지는 maven이 스마트해질 때까지 매우 오래 기다리거나 로컬 저장소를 완전히 삭제하는 것입니다. 아마도 대기 옵션은 앞서 언급 한 업데이트 간격과 관련이 있습니다.

우리는 maven 3.0.2 및 3.0.3에서이 문제를 경험했습니다. 우리는 Archiva 1.0.3을 사용하고 있습니다 (하지만 이것이 요인이되어서는 안됩니다). 어떤 도움이라도 대단히 감사하겠습니다.


1
Maven이 "대기"동안 또는 바로 전에 로깅합니까? 즉, 연결할 수없는 저장소에 연결을 시도하고 있습니까? 또한 문제가있는 유물은 "-SNAPSHOT"입니까?
noahlz

Maven은 위에서 언급 한 오류 외에는 아무것도 기록하지 않습니다. 그리고 네 이것은 스냅 샷 의존성입니다.
user1686620


1
두 번째 프로젝트를 빌드하기 전에 빌드 패키지를 설치 했습니까?
khmarbaise

3
오류 메시지가 문법적으로 올바른 문장이 아니라 실행되는 방식을 좋아합니다. 이렇게하면 Y를 찾을 수 없는지 또는 Y가 로컬로 캐시되었는지 또는 둘 다인지 확실하게 알 수 없습니다. 어쨌든 비슷한 문제가 있습니다. 내 종속성 회사의 내부 저장소에 있기 때문에 -U 옵션으로 해결할 수있었습니다 . 필요한 아티팩트가 회사의 내부 저장소에 배포되지 않는 이유는 무엇입니까?
jyoungdev

답변:


77

로컬 Maven 저장소는 아티팩트 디렉토리에있는 "_maven.repositories"라는 파일을 사용하여 아티팩트가 원래 어디에서 왔는지 추적합니다. 제거한 후 빌드가 작동했습니다. 이 답변 으로 문제가 해결되었습니다.


26
저에게는 "_remote.repositories"라는 파일이었습니다. 나는 그것을 제거하고 작동했습니다! 트릭에 감사드립니다!
perbellinio

2
_remote.repositories라는 파일도 있습니다. 네트워크 연결을 가진 우리의 넥서스 정지가 종속 얻을 질수 있도록 할 때 나에게 무슨 일이 있었
cabaji99

1
제공된 솔루션이 작동합니다. 그러나 나는이 문제가 왜 발생하는지에 관심이 있습니다. 아무도 나에게 빠른 설명을 제공 할 수 있습니까? 뭔가 다르게해야합니까?
Janothan

이 원본 확인을 한 번 건너 뛰려면 (메타 파일을 삭제하지 않고) aether.enhancedLocalRepository.trackingFilename=some_dummy_file_name종속성 해결 프로세스로 전달해보십시오 . 가장 쉬운 방법은 -D 시스템 속성을 호출 명령에 추가하는 것입니다.
Janaka Bandara 2019

@Janothan IMO 대답에있는 링크는 꽤 좋은 설명을 : 제공
Janaka 다라

40

여기에있는 옵션이 작동하지 않았기 때문에 해결 방법을 공유하고 있습니다.

내 프로젝트에는 많은 하위 모듈이있는 상위 프로젝트 (자체 pom.xml 포함)가 있으며 그 중 하나는 (A) 다른 하위 모듈 (B)에 대한 종속성이 있습니다. mvn packageA에서 시도했을 때 B가 해결되지 않았기 때문에 작동하지 않았습니다.

mvn install 상위 디렉토리에서 실행 하면 작업이 수행되었습니다. 그 후, mvn packageA 내부에서 할 수 있고 B를 찾을 수 있습니다.


3
감사합니다! 이것은 나를 미치게 만들었다. mvn clean package jboss-as : deploy는 한 줄에서 실행할 때 작동했지만 별도로 수행했을 때는 작동하지 않았습니다.
PMorganCA 2011

18

오프라인 모드에서도 Maven은 종속성에 대한 _remote.repositories 마커가 있으면 원격 저장소를 확인합니다. 오프라인 모드에서 작업해야하는 경우 이러한 파일을 삭제해야 할 수 있습니다.

아래의 간단한 셸 명령은 이러한 마커 파일을 삭제합니다. 기기에 오프라인 모드 만 사용하는 경우 안전합니다. 웹에서 파일을 가져와야하는 컴퓨터에서는이 작업을 수행하지 않습니다.

웹에서 연결이 끊긴 빌드 서버에서이 전략을 사용했습니다. 저장소를 여기로 전송하고 마커 파일을 삭제 한 다음 오프라인 모드에서 실행해야합니다.

Linux / Unix에서는 다음과 같은 방법으로 원격 저장소 마커 파일을 삭제할 수 있습니다.

cd ~/.m2
find . -name "_remote.repositories" -type f -delete

1
이 솔루션은 중앙 저장소에서 사용할 수없는 다른 컴퓨터에서 복사 한 종속성에 대해 저에게 효과적이었습니다. 그러나 명령은 몇 개의 문자가 누락되었습니다. 전체 명령은 다음과 같습니다. find. -name "_remote.repositories"타입 -f -delete
한스 Deragon

2
또는 삭제하는 대신 Maven 이 프로세스 _remote.repositories에 전달 하여 파일을 보지 않도록 "잘못 안내"할 수 있어야합니다 -Daether.enhancedLocalRepository.trackingFilename=some_dummy_file_name. (프로그래밍 메이븐를 호출 할 때 실제 메이븐 빌드하려고 노력하지만, 작동하지 않았다 이전해야 또한 작업 때문에)
Janaka 다라

1
Maven에서 찾을 수없는 특정 종속성 (jar)을 찾아서 삭제했습니다. 목록에 있고 관리 할 수 ​​있었기 때문입니다 (<10). 이것은 현재 사용할 수없는 원격 Nexus를 가리키는 잘못된 구성 때문입니다. 따라서 삭제를 위해 모든 저장소를 실제로 쓸 필요가 없습니다. 어쨌든이 솔루션은 하루를 절약했습니다. 그것은 나를 위해 일합니다.
Diego1974

9

이런 일이 발생했을 때 템플릿에서 내 settings.xml을 맹목적으로 복사했는데 여전히 빈 <localRepository/>요소 가 있었기 때문 입니다. 이는 종속성을 해결할 때 사용되는 로컬 저장소가 없음을 의미합니다 (설치된 아티팩트는 여전히 기본 위치에 저장 됨). 내가 그것을 교체했을 때 <localRepository>${user.home}\.m2\repository</localRepository>작동하기 시작했습니다.

* nix의 경우 <localRepository>${user.home}/.m2/repository</localRepository>라고 생각합니다.


6
$ {user.home} \. m2 \ repository가 기본값이므로 빈 태그를 제거하면 동일하게 작동합니다.
Luis Muñoz 2015 년

9

Maven은 무언가를 찾지 못했을 때를 기억합니다. 핵심은 "내부 업데이트 간격이 경과하거나 업데이트가 강제 실행될 때까지 해결이 다시 시도되지 않습니다.->"입니다.

빠른 해결책은 문제를 해결했다고 가정하고 문제 아티팩트에 대한 로컬 "저장소"하위 디렉토리를 삭제하는 것입니다. :)

mvn -U 원격 저장소에서 업데이트를 강제합니다-다시 말하지만, 이제 원격으로 해당 아티팩트를 채웠다 고 가정합니다.


2

모두 잡아라. 여기에 언급 된 솔루션이 작동하지 않으면 (제 경우에 발생) '.m2'폴더 / 디렉터리에서 모든 콘텐츠를 삭제하고 mvn clean install.



1

나는이 문제에 직면하여 두 가지 방법으로 해결했습니다.

1) IDE에서 프로젝트를 선택하고 모든 프로젝트를 정리 한 다음 프로젝트를 마우스 오른쪽 버튼으로 클릭하여 모든 Maven 종속성을 설치-> Maven으로 이동하고 프로젝트 종속성 업데이트로 한 번에 모든 프로젝트를 선택하여 동일하게 설치하십시오. 이 작업이 완료되면 특정 프로젝트를 실행하십시오.

2) 다른 방법으로는 pom.xml에서 오류가 발생하는 종속성을 확인하고 해당 종속 프로젝트를 먼저 "mvn clean install" 하고 문제가 발생한 현재 프로젝트의 Maven 종속성을 설치합니다. 이를 통해 로컬 프로젝트의 종속성이 빌드되고 jar가 생성됩니다.


0

새 프로젝트가 oracle jdbc jar에 의존 할 때 비슷한 문제가 발생합니다 (로컬 저장소에 설치했으며 다른 프로젝트에서 잘 작동 함). -U 옵션을 시도하고 .lastupdate 파일 또는 전체 디렉토리를 삭제하고 다시 다운로드했지만 작동하지 않았습니다. 마지막으로 디렉토리를 삭제하고 로컬로 다시 설치하면 작동합니다.


0

Maven에서 발견 한 오류 중 하나는 settings.xml 파일을 잘못된 디렉토리에 넣을 때입니다. 사용자 홈 디렉토리 아래의 .m2 폴더에 있어야합니다. 올바른 위치에 있는지 확인하십시오 (사용하는 경우 settings-security.xml과 함께).


0

DependencyResolutionException쉘 스크립트를 통해 로컬 아티팩트를 설치할 때 Ubuntu Linux에 있었습니다 . 해결책은 로컬 아티팩트를 삭제하고 mvn install:install-file터미널을 통해 호출 하여 "수동으로"다시 설치하는 것이 었습니다 .


0

이것은 내가 http대신에 있었기 때문에 발생 https했습니다.

<repository>
    <id>jcenter</id>
    <name>jcenter-bintray</name>
    <url>https://jcenter.bintray.com</url>
</repository>

0

아티팩트 Y의 패키징이 "jar"로 설정되어 있는지 확인하십시오. 오류 또는 복사 붙여 넣기로 "war"로 정의한 경우 "로컬 저장소에 캐시되었습니다. 내부 업데이트 간격이 경과하거나 업데이트가 강제 실행될 때까지 해결이 다시 시도되지 않습니다"라는 이상한 메시지가 표시됩니다. 나는 "아티팩트 Y는 전쟁이고, 단지 유형이 예상된다"와 같은 것을 기대할 것이다.


-1

다른 원인으로 인해 동일한 오류가 발생했습니다. "우수 사례"종속성을 포함하는 스타터 POM을 만들고이를 테스트하기 위해 로컬로 빌드 및 설치했습니다. 리포지토리에서 "볼"수 있지만이를 사용한 프로젝트는 위의 오류가 발생했습니다. 내가 한 일은 스타터 POM을 pom으로 설정했기 때문에 JAR이 없었습니다. Maven은 넥서스에 없었기 때문에 매우 정확했지만 예상하지 못했기 때문에 오류가 도움이되지 않았습니다. 스타터 POM을 일반 패키징 및 재설치로 변경하면 문제가 해결되었습니다.


이 대답은 질문에 대한 직접적인 대답이 아니기 때문에 아마도 주석으로 더 좋았을 것입니다.
00prometheus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.