2017-04-05 1 views
3

이전에 결코 만난 적이없는 이상한 Maven 구성 문제가 발생했습니다. 내 솔루션과 관련하여 혼란 스럽습니다.왜 내 settings.xml 파일에 저장소를 지정해야합니까?

나는 모든 것을 거울처럼 사용하는 로컬 Nexus 서버를 가지고 있습니다. 지금까지 난 단지 내 Settings.XML이 파일에 다음 거울을 했어 :

<mirrors> 
      <mirror> 
        <id>nexus</id> 
        <mirrorOf>*</mirrorOf> 
        <name>WADA Nexus</name> 
        <url>https://nexus.domain.org/repository/Public/</url>                        
      </mirror> 
    </mirrors> 

그러나, 나는 최근에 내 넥서스의 repo에 배포 한 내 자신 만의 부모 치어를 창조하고 싶었다. 지금 내 빌드를 실행하려고하면

<parent> 
      <groupId>org.domain</groupId> 
      <artifactId>root-pom</artifactId> 
      <version>1.0.0-SNAPSHOT</version> 
    </parent> 

그러나, 다음과 같은 실패 : 어떤 이유

ERROR: Failed to parse POMs 
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs: 
[FATAL] Non-resolvable parent POM: Could not find artifact org.domain:root-pom:pom:1.0.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 9, column 10 

, 받는다는 노력하지 않는 내 프로젝트에서, 나는 나의 부모 치어 지적했다 내 Nexus 레포에서 상위 POM을 조회합니다. 나는 모든 레 포스/URL을 미러링 한 이후

<repositories> 
    <repository> 
     <id>nexus</id> 
     <releases> 
     <enabled>true</enabled> 
     <updatePolicy>always</updatePolicy> 
     <checksumPolicy>warn</checksumPolicy> 
     </releases> 
     <snapshots> 
     <enabled>true</enabled> 
     <updatePolicy>never</updatePolicy> 
     <checksumPolicy>fail</checksumPolicy> 
     </snapshots> 
     <url>https://www.google.com/anythingCanGoHere</url> 
     <layout>default</layout> 
    </repository> 
    </repositories> 

, 나는 임의의 값으로 해당 URL을 설정할 수 있습니다 받는다는 지금 것 :

내 유일한 해결 방법은 내 Settings.XML의 파일에 임의의 저장소 값을 정의하는 것이 었습니다 부모님을 데리러와.

그럼 왜 저장소를 지정해야합니까? maven이 자동적으로 상위 pom을 maven 중앙이나 다른 기본 저장소와 비교하려고 시도해서는 안됩니까?

+0

POM 파일을 보여주세요. 올바른 내부 저장소 관리자의 모든 항목을 mirrorOf로 구성한 Maven Central에서 해결되지 않습니다. – khmarbaise

+0

@khmarbaise 나는 그것이 실제로 maven 중심에 도착하지 않을 것이라는 것을 깨닫는다. 그러나 나는 그것을 시도 할 것을 기대하고 있었고, 거울 설정으로 인해 나의 넥서스로 방향 전환되었다. pom 파일은 매우 기본입니다 - 부모 정의 외에도 일부 속성, 종속성 정의 및 몇 가지 플러그인 정의가 있습니다. 리포지토리 또는 distributionManagement 항목이 없습니다. –

+0

@khmarbaise 일단 내가 이것에 대해 생각해 보았 더라면, SNAPSHOT 저장소를 명시 적으로 지정하지 않으면 maven이 어디에서 SNAPSHOT 아티팩트를 찾을 지 알지 못한다고 결론을 내렸다. 디자인에 의한 것인가? 스냅 샷 생성물에 기본 repos (maven 중앙과 같은)가 없습니까? –

답변

1

이상한 구성 문제는 아니지만 오해의 소지가 있습니다. 부모 POM에 <distributionManagement/>을 채우고 로컬 Nexus 인스턴스와 함께 settings.xml에 캐치 올 미러를 추가하고 제대로 작동 할 것으로 기대합니다.

실제로 무엇을 미러링하는지 알고 있습니까? 아니! Maven의 하드 코딩 된 기본 저장소는 Maven Central입니다. 스냅 샷이 포함되지 않은 릴리스 레포입니다. 따라서 ERROR이 표시됩니다. 가짜 repo는 Maven이 Nexus 인스턴스의 스냅 샷을 요청할 때 필요합니다. 그렇지 않으면 릴리즈 만 요청합니다. Nexus에는 Central과 호스트 된 릴리스 및 스냅 샷 저장소가있는 Repo 그룹이 있습니다.

POM에 스냅 샷 리포지토리를 정의하지 않으면 (그렇게하면 안됨) Maven은 스냅 샷을 다운로드 할 수 없습니다.

+0

그것은 내가 예상했던 것입니다. 정의 된 스냅 샷의 기본 저장소가 있는지 확실하지 않았습니다. –

관련 문제