Nexusにアーティファクトをデプロイするときのエラー


102

ネクサスサーバーの自分のリポジトリにアーティファクトをデプロイするときにエラーが発生する:「アーティファクトをデプロイできませんでした:アーティファクトを転送できませんでした」「ファイルhttp:/// my_artifactを転送できませんでした。戻りコードは400です」

1つのカスタムリポジトリmy_repoと次のmavenローカル構成で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の1つが間違っていると思います。
Mark O'Connor

私にとっての問題は、それがスナップショットバージョンではないことでした。
マベロイド

回答:


156

私が考えることができるいくつかのこと:

  • ユーザーの資格情報が間違っている
  • サーバーへのURLが間違っています
  • ユーザーにはデプロイメントリポジトリへのアクセス権がありません
  • ユーザーは特定のリポジトリターゲットにアクセスできません
  • アーティファクトは、リリース(-SNAPSHOTバージョンではない)の場合、そのバージョンですでにデプロイされています。
  • リポジトリは、それぞれのアーティファクトのデプロイには適していません(たとえば、ホストされたリポジトリの代わりに、スナップショットバージョンのリリースリポジトリ、プロキシリポジトリ、またはグループ)。

それらを確認し、問題が解決しない場合は、ここに詳細を入力してください。


44
アーティファクトのバージョンをSNAPSHOTに変更してから展開しましたが、すべて問題ありませんでした。それから私は私の問題の原因だったので、私は、ネクサス・グループ(ないネクサスリポジトリ)に展開しようとしていたことに気づいた:「私のネクサスリポジトリへのURLが間違っていた」
acimutal

5
重要:「アーティファクトはリリース(-SNAPSHOTバージョンではない)の場合、そのバージョンですでにデプロイされています」
Bhushan

1
私の日を保存しました... pom.xmlのバージョンから-SNAPSHOTワードを削除しました。そのため、ネクサスにデプロイできません...私はSNAPSHOTワードを元に戻しましたが、
うまくいきました。–

3
私の経験では、資格情報が間違っていると400ではなく401になります。バージョン名に「-SNAPSHOT」を付けると、問題が解決しました。
Marcus Junius Brutus

1
リポジトリのデプロイメントポリシーを変更するだけで、再デプロイが可能になります
Furqan

35

別の答えを作成するだけです。回答は実際には、受け入れられた回答のコメントに記載されています。

で終わるようにアーティファクトのバージョンを変更してみてください-SNAPSHOT


2
全体のポイントを見逃していないので、「問題の原因は「ネクサスリポジトリへのURLが間違っていた」とある」とあるコメントを注意深く読んでください。そして、「戻りコードは400です」という意味を理解してください(誰かのコメントを回答としてコピーする前に)
kuhajeyan

13
検索でこのページにアクセスしたので、ここでコメントしたかっただけです。私は同じ400エラーに遭遇し、ここでbhagyasが言ったことが重要です(そのとき私はそれを認識していませんでした)、スナップショットリポジトリにデプロイする場合、バージョンは-SNAPSHOTで終わる必要があります。私のバージョンは1.13.0.SNAPSHOTで、1.13.0-SNAPSHOTである必要があることを理解するのに1時間かかりました。
Craig

16

次の場合、400 Bad Requestが返されます。

  1. 展開のスナップショットで終わるアーティファクト(またはバージョン)-snapshotリリースリポジトリ
  2. リリースアーティファクト(バージョンが-SNAPSHOT終わらない)をスナップショットリポジトリにデプロイする
  3. 同じバージョンのリリースアーティファクトをリリースリポジトリに複数回デプロイする


7

私は今日、この正確な問題を抱えていました。問題は、私がリリースしようとしていたバージョンでした:実行は、Nexusリポジトリにすでに存在していました。

私の場合、これはおそらくrelease:performの以前の呼び出し中にネットワークが切断されたことが原因でした。接続を失いましたが、リリースは成功したようです。


7

同じ安定したアーティファクトをNexusに再デプロイする必要があるまれなイベントでは、デフォルトで失敗します。その後、アーティファクトを再度デプロイする目的で(ウェブインターフェースを介して)Nexusから削除しても、jarやpomを削除するだけではディレクトリに残っている他のファイルが消去されないため、デプロイは失敗します。ボックスにログオンし、ディレクトリ全体を削除する必要があります。


2
これに追加するだけで、サーバーへのインタラクティブなアクセス権がない場合(私はいけません-その管理ボックス)、HTTP DELETEを使用して問題のアーティファクトを削除できます。私はこの目的のためにPostManを使用しています
Nathan Russell

S3ブロブストアプラグインを使用しているためかどうかはわかりませんが、リポジトリ構造と一致するディレクトリ構造が表示されません。削除するディレクトリを特定するためのトリックはありますか?私のファイルはすべてハッシュで名前が付けられています。ディレクトリの形式content/vol-{01-43}/chap-{01-47}
majikman

GAVタイプの検索からアーティファクトを探す代わりに、リポジトリからリリースディレクトリに移動して、リリースのすべてのファイルを削除することもできます。リポジトリー・ビューで、ディレクトリーを右クリックして、そのGAVにあるすべてのファイルの削除アクションを取得できます。
クリスチャントリンブル、

3

「戻りコードは:400、ReasonPhrase:不正なリクエストです」という追加で、今日同じ問題が発生しました。上記の回答から「アーティファクトはリリースの場合、そのアーティファクトはすでにデプロイされている」問題であることが判明しましたここにリンクの説明を入力してください

まだ言及されていないソリューションの1つは、リリースリポジトリへの再展開を許可するようにNexusを設定することです。これは理由のために設定されているため、おそらくベストプラクティスではないかもしれません。それでも、Nexusリポジトリの[構成]タブの[アクセス設定]に移動して、[展開ポリシー]を[再展開を許可]に設定できます。


3
  • 親pom application ==>バージョンに次のようにタグを付けます:xxx-SNAPSHOT

例:0.0.1-SNAPSHOT

  • 「-SNAPSHOT」:非常に重要

2

ネクサス(リリースとして)に既に存在しない(アーティファクトとバージョン)ことを確認します。その場合はBad Requestを返します。


2

400エラーの場合、リポジトリの「展開ポリシー」をチェックします。通常は「再展開を無効にする」です。ほとんどの場合、ライブラリバージョンはすでに存在しているため、「PUTできませんでした」というメッセージが表示されます。https://yoururl/some.jar status code 400 from server:Repository assets :: yourリポジトリ名」

したがって、これを解決するにはいくつかのオプションがあります。1-再デプロイを許可する2-アップロードしようとしているリポジトリからバージョンを削除する3-バージョン番号を変更する


通常、リリースリポジトリの再デプロイメントを許可することは、良い方法とは見なされません。考慮せずにそれをしないでください。
Itaypk

1
@Itaypkあなたが正しいので、他のいくつかの提案を提案しました。私の意見では、バージョンを変更する方が良いです。
フルカン

1

上記の回答のいずれかがうまくいった場合、(下に添付されているNEXUSスクリーンショット)の管理者側から直接新しいアーティファクトを作成できます。

  1. Login to nexusUI http:// YOUR_URL:8081 / nexus(username:admin default password:admin123
  2. Click repositories 左側で、リポジトリをクリックします。例:リリースをクリックします。
  3. artifact Upload(最後のタブ)を選択します。
  4. 選択GAV definitionとしてGAV Param-その後、あなたのグループID、アーティファクトのIDとバージョンを入力します。
  5. JARファイルを選択します。
  6. [アーティファクトのアップロード]をクリックします。それでおしまい !

これで、対応するものをプロジェクトに追加できるようになります(下のスクリーンショット)。

ここに画像の説明を入力してください


1

これは、バージョンに関する命名ポリシーがあり、デプロイしようとしているバージョン番号を禁止している場合にも発生する可能性があります。私の場合、(リポジトリをリリースするために)バージョンをアップロードしようとし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.