2013-08-16 6 views
2

내 로컬 컴퓨터에 설치된 자체 버전의 Nexus 웹 앱 리포지토리를 사용하고 있습니다. 넥서스 설치 후 나는 모든 기본 저장소를 제거하고 내 자신 추가 한일부 Maven 아티팩트에 대한 프록시처럼 작동하는 로컬 Nexus 리포지토리

http://localhost:8081/nexus/content/repositories/MySnapshots/ 

참고 : 나는 넥서스는 하나의 저장소 내 스냅 샷을 저장하는 하나를 구성했습니다. (아마도 이것은 나쁜 생각 이었습니까?)

mvn 새로 설치를 수행 할 때 일부 타사 아티팩트가 원격 저장소에서 곧바로 다운로드되는 것으로 나타났습니다.

Downloading: http://repo.maven.apache.org/maven2/com/sun/org/apache/xml/internal/resolver/... 

이상한 것은 내가 다른 유물 궁극적 이슈에 도착 내 로컬 넥서스를 통과하는 볼 것입니다 : 예를 들어, 여기에 빌드의 출력 라인 중 하나입니다

Downloading: http://localhost:8081/nexus/content/repositories/MySnapshots/org/apache/maven/wagon/wagon-provider-api... 

다운로드 URL의 첫 번째 부분이 내 로컬 리포지토리이지만 어떻게 되나요? MySnapshots은 apache.org에서 제공됩니다.

내 넥서스 저장소가 인공물 다운로드에 대해 maven.apache.org의 프록시 역할을하지만 거의 다른 곳에서는 소스로 바로 연결됩니다.

왜 이런 일이 일어 났는지 말해 줄 수 있습니까?

내 모든 빌드가 항상 성공했지만 너무 큰 프로젝트를 컴파일 할 때 종종 아티팩트를 찾을 수 없어 빌드가 실패하는 경우가 있습니다. 예를 들어

, 나는 이클립스 JDT 물건에 따라 다른 프로젝트를 빌드 할 때 다음과 같은 오류 얻을 :이 내 넥서스가 제대로 경우 또는 구성되지 않았 음을 의미하는 경우

Downloading: http://localhost:8081/nexus/content/repositories/MySnapshots/eclipse/jdt/core/eclipse.jdt.core 
Could not find artifact eclipse.jdt.core:eclipse.jdt.core 

나는 확실하지 않다가 정말로 인공물 eclipse.jdt.com이 아닙니다. 다운로드가 로컬 Nexus 저장소를 거치지 않으면 pom/settings.xml 파일을 조사합니다. 대신 내 넥서스 설정 때문인지 궁금합니다.

나는 이것이 당신이 여기에서 볼 수 있습니다 볼 때 메이븐 내 Settings.XML이 나는 건물입니다 프로젝트에 대한 내 치어 파일을 참조하시기 바랍니다 :

Settings.XML의 : http://pastebin.com/NvLr5bEA

치어 .xml : http://pastebin.com/PJ0P3RaK

+0

큰 프로젝트는 무엇을 의미합니까? – saurav

+0

jaxb2 플러그인을 직접 컴파일하려고합니다. : P 그 프로젝트는 15 개의 maven 모듈을 가지고 있습니다. –

+0

모듈을 만드는 동안 여기에서 전체 로그를 제공 할 수 있습니까? 외부 링크는 권장되지 않습니다. – saurav

답변

0

Maven Central Repo에서 다운로드 할 때 첫 번째 사례에 대한 이해가 끝나기까지 프록시 문제가 아니라고 생각합니다. 넥서스 저장소에 동일한 아티팩트를 사용할 수 없을 수도 있습니다. 왜 Maven Central Repo에 갈 것인가?

두 번째 경우 반응기가 Maven Central Repo에서 다운로드하려고하지 않았으므로 넥서스에서 사용할 수 있습니다.

+0

좋은 생각. 두 번째 경우 Nexus에서 사용할 수 있다면 어떻게 될까요? 초기 Nexus 설치에서 모든 저장소를 제거한 다음 직접 추가 한 것입니다. 아마도 Nexus 캐시 아티팩트 그걸 통과하는거야? –

2

평소처럼 로컬 넥서스를 프록시로 사용하려는 경우 설정을 구성해야합니다.xml은 다음과 같습니다 :

<mirrors> 
    <mirror> 
     <!--This sends everything else to /public --> 
     <id>nexus</id> 
     <mirrorOf>*</mirrorOf> 
     <url>http://localhost:8081/nexus/content/groups/public</url> 
    </mirror> 
    </mirrors> 
    <profiles> 
    <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></releases> 
      <snapshots><enabled>true</enabled></snapshots> 
     </repository> 
     </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>central</id> 
      <url>http://central</url> 
      <releases><enabled>true</enabled></releases> 
      <snapshots><enabled>true</enabled></snapshots> 
     </pluginRepository> 
     </pluginRepositories> 
    </profile> 
    </profiles> 
    <activeProfiles> 
    <!--make the profile active all the time --> 
    <activeProfile>nexus</activeProfile> 
    </activeProfiles> 

까다로운 것은 구성된 Nexus 인스턴스에 대한 모든 호출을 다시 라우팅하는 것입니다. Eclipse 파트와 같이 언급 한 사항은 문제가 될 수 있습니다. 일부 아티팩트는 Maven 중심에서 사용할 수 있습니다. 또한 maven central, release repository 및 snapshots repository와 같은 기본값은 변경하지 않고 그대로 두어야합니다. 필요한 저장소가 있어야합니다.