code

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

codestyles 2020. 9. 19. 11:13
반응형

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


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

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

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

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

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

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


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


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

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

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


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

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

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

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

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

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

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

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


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

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


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


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


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


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

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

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


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

참고 URL : https://stackoverflow.com/questions/12517129/maven-fails-to-find-local-artifact

반응형