Nexus에서 아티팩트를 배포 할 때 오류 발생


102

Nexus 서버의 내 저장소에 아티팩트를 배포 할 때 오류가 발생합니다. "아티팩트 배포 실패 : 아티팩트를 전송할 수 없습니다." "http : /// my_artifact 파일을 전송하지 못했습니다. 반환 코드 : 400"

다음 maven 로컬 구성으로 하나의 사용자 정의 저장소 my_repo로 Nexus를 실행하고 있습니다.

settings.xml

<server>
    <id>my_repo</id>
    <username>user</username>
    <password>pass</password>
 </server>
 ...
 <mirror>
    <id>my_repo</id>
    <name>Repo Mirror</name>
    <url><my_url_to_my_repo></url>
    <mirrorOf>*</mirrorOf>
  </mirror>
  • 사용자는 my_repo에 작성 / 읽기 / 쓰기 권한이 있습니다.

pom.xml

<distributionManagement>
        <repository>
            <id>my_repo</id>
            <name>my_repo</name>
            <url><my_url_to_my_repo></url>
            <layout>default</layout>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url><my_url_to_my_snapshot_repo></url>
        </snapshotRepository>
    </distributionManagement>

그리고 나는 실행

mvn deploy

오류가 발생합니다. 어떤 생각?


2
HTTP 400은 "잘못된 요청"을 의미합니다. URL 중 하나가 잘못되었다고 생각합니다.
Mark O'Connor

나에게 문제는 스냅 샷 버전이 아니라는 것이었다.
maveroid

답변:


156

내가 생각할 수있는 몇 가지 :

  • 사용자 자격 증명이 잘못되었습니다.
  • 서버 URL이 잘못되었습니다.
  • 사용자는 배치 저장소에 대한 액세스 권한이 없습니다.
  • 사용자는 특정 저장소 대상에 대한 액세스 권한이 없습니다.
  • 아티팩트가 릴리스 (-SNAPSHOT 버전 아님) 인 경우 해당 버전으로 이미 배포되었습니다.
  • 저장소가 각 아티팩트의 배포에 적합하지 않습니다 (예 : 스냅 샷 버전의 릴리스 저장소, 호스트 저장소 대신 프록시 저장소 또는 그룹).

이를 확인하고 여전히 문제가 발생하면 여기에 자세한 내용을 제공하십시오.


44
내 아티팩트의 버전을 SNAPSHOT으로 변경 한 다음 배포하고 모두 괜찮 았습니다. 그런 다음 Nexus 그룹 (Nexus 리포지토리 아님)에 배포하려고한다는 것을 깨달았으므로 문제의 원인은 '내 nexus 리포지토리에 대한 URL이 잘못되었습니다'
acimutal

5
중요 : "아티팩트가 릴리스 (-SNAPSHOT 버전 아님) 인 경우 해당 버전과 함께 이미 배포되었습니다."
Bhushan

1
하루를 절약했습니다 ... pom.xml의 버전에서 -SNAPSHOT 단어를 제거했기 때문에 nexus에 배포 할 수 없습니다 ... SNAPSHOT 단어를 다시 추가하고 작동했습니다 ..
venugopal

3
내 경험상 잘못된 자격 증명은 400이 아니라 401이됩니다. 버전 이름에 "-SNAPSHOT"을 붙이면 문제가 해결되었습니다.
Marcus Junius Brutus 2017

1
리포지토리의 배포 정책을 변경하여 재배포를 활성화 할 수 있습니다.
Furqan

35

별도의 답변을 작성하십시오. 답변은 실제로 수락 된 답변에 대한 의견에서 찾을 수 있습니다.

아티팩트의 버전을 -SNAPSHOT.


2
아니요, 전체 요점을 놓치고 있습니다. "내 문제의 원인은 '내 넥서스 저장소의 URL이 잘못되었습니다'"라고 언급 된 주석을주의 깊게 읽으십시오. 그리고 'Return code is : 400'이 의미하는 바에 대한 아이디어를 얻으십시오 (누군가의 댓글을 답으로 복사하기 전에)
kuhajeyan

13
검색에서이 페이지를 쳤기 때문에 여기에 댓글을 달고 싶었습니다. 동일한 400 오류가 발생했고 bhagyas가 여기에서 말한 것이 핵심입니다 (당시에는 몰랐지만). 스냅 샷 저장소에 배포하는 경우 버전은 -SNAPSHOT로 끝나야합니다. 내 버전은 1.13.0.SNAPSHOT이었고 1.13.0-SNAPSHOT이 필요한지 알아내는 데 한 시간이 걸렸습니다.
크레이그

16

다음을 시도하면 400 잘못된 요청이 반환됩니다.

  1. 배포] 스냅 샷 끝나는 유물 (또는 버전) -snapshot A를 릴리스 저장소
  2. 릴리스 아티팩트 ( -SNAPSHOT로 끝나지 않는 버전 )를 스냅 샷에 배포 저장소에 합니다.
  3. 릴리스 아티팩트 의 동일한 버전을 릴리스 저장소에 두 번 이상 배치


7

나는 오늘이 정확한 문제가 있었고 문제는 내가 릴리스하려는 버전이 이미 Nexus 저장소에 있다는 것입니다.

제 경우에는 release : perform의 이전 호출 중에 네트워크 연결이 끊어 졌기 때문일 수 있습니다. 연결이 끊어졌지만 릴리스가 성공한 것 같습니다.


7

드물게 Nexus에 SAME STABLE 아티팩트를 재배포해야하는 경우 기본적으로 실패합니다. 그런 다음 다시 배포 할 목적으로 Nexus에서 아티팩트를 삭제하면 (웹 인터페이스를 통해) 배포가 실패합니다. 예를 들어 jar 또는 pom을 제거하는 것만으로는 디렉토리에있는 다른 파일이 삭제되지 않기 때문입니다. 상자에 로그온하고 디렉터리 전체를 삭제해야합니다.


2
여기에 추가하기 위해 서버에 대한 대화 형 액세스 권한이없는 경우 (관리되는 상자가 아님) HTTP DELETE를 사용하여 문제가되는 아티팩트를 삭제할 수 있습니다. 나는이 목적을 위해 우체부를 사용
나단 러셀

S3 blobstore 플러그인을 사용하고 있기 때문인지 확실하지 않지만 리포지토리 구조와 일치하는 디렉터리 구조가 표시되지 않습니다. 삭제할 디렉토리를 식별하는 트릭이 있습니까? 내 모든 파일은 해시로 이름이 지정됩니다. 디렉토리는 형식입니다content/vol-{01-43}/chap-{01-47}
majikman

GAV 유형 검색에서 아티팩트를 찾는 대신 저장소에서 릴리스 디렉토리로 이동하여 릴리스의 모든 파일을 삭제할 수도 있습니다. 저장소보기에서 디렉토리를 마우스 오른쪽 버튼으로 클릭하여 해당 GAV의 모든 파일에 대한 삭제 작업을 수행 할 수 있습니다.
Christian Trimble

3

오늘도 "반환 코드 : 400, ReasonPhrase : 잘못된 요청"을 추가하여 동일한 문제가 발생했습니다. 위의 답변에서 "아티팩트가 이미 해당 버전과 함께 배포되었습니다"문제로 판명되었습니다. 여기에 링크 설명을 입력하십시오.

아직 언급되지 않은 한 가지 해결책은 릴리스 저장소에 재배포 할 수 있도록 Nexus를 구성하는 것입니다. 이 설정은 이유가 있기 때문에 모범 사례가 아닐 수 있습니다. 그럼에도 불구하고 Nexus 저장소의 "구성"-탭에서 "액세스 설정"으로 이동하여 "배포 정책"을 "재배포 허용"으로 설정할 수 있습니다.


3
  • 상위 pom application ==> 버전에서 다음과 같이 태그를 넣으십시오. xxx-SNAPSHOT

예 : 0.0.1-SNAPSHOT

  • "-SNAPSHOT": 매우 중요합니다.

2

nexus (릴리스)에 이미 존재하지 않는지 (아티팩트 및 버전) 확인하십시오. 이 경우 잘못된 요청을 반환합니다.


2

400 오류의 경우 "배포 정책"저장소에서 일반적으로 "재배포 비활성화"를 확인합니다. 대부분의 경우 라이브러리 버전이 이미 있으므로 "Could not PUT put ' https : //yoururl/some.jar 메시지를받은 이유입니다 . '. 서버에서 상태 코드 400 수신 : 저장소에서 자산 업데이트를 허용하지 않습니다." 저장소 이름 "

따라서이 문제를 해결할 수있는 몇 가지 옵션이 있습니다. 1- 재배포 허용 2- 업로드하려는 저장소에서 버전 삭제 3- 버전 번호 변경


릴리스 저장소에 대한 재배포를 허용하는 것은 일반적으로 좋은 방법으로 간주되지 않습니다. 고려없이 그렇게하지 마십시오.
Itaypk 19

1
@Itaypk 당신이 맞기 때문에 몇 가지 다른 제안을 제안했습니다. 제 생각에는 버전을 변경하는 것이 좋습니다.
Furqan 19

1

위의 답변 중 하나라도 해결되면 (아래에 첨부 된 NEXUS 스크린 샷)의 관리자 측에서 직접 새 아티팩트를 만들 수 있습니다.

  1. Login to nexusUI http : // YOUR_URL : 8081 / nexus (사용자 이름 : admin 기본 비밀번호 : admin123 )
  2. Click repositories 왼쪽에서 repo를 클릭하십시오. 예 : 릴리스를 클릭하십시오.
  3. artifact Upload(마지막 탭)을 선택합니다 .
  4. 선택 GAV definition으로GAV Param 그런 다음 그룹 ID, 아티팩트 ID 및 버전을 입력합니다 -.
  5. Jar 파일을 선택하십시오.
  6. 이슈 업로드를 클릭합니다. 그게 다야!

이제 프로젝트에 해당하는 내용을 추가 할 수 있습니다 (아래 스크린 샷).

여기에 이미지 설명 입력


1

이는 배포하려는 버전 번호를 금지하는 버전에 대한 이름 지정 정책이있는 경우에도 발생할 수 있습니다. 제 경우에는 버전을 업로드하려고했습니다 (repo를 릴리스하기 위해)2.0.1 했지만 나중에 넥서스 구성이 릴리스에 정수 이외의 다른 것을 허용하지 않는다는 것을 알게되었습니다.

나중에 버전으로 시도했습니다. 2 하고 성공적으로 배포했습니다.

오류 메시지는 확실히 도움이되지 않습니다.

Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases-xxx. -> [Help 1]

더 나은 메시지는 version 2.0.1 violates naming policy


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