web-dev-qa-db-ja.com

maven deploy:deploy-fileが失敗します(409競合)、しかしアーティファクトは正常にアップロードされます

注意:

Jarがリポジトリに配置されたことがわかりましたが、pom.xmlはそうではありませんでした。今、pom.xmlの昇格に失敗する別のプロジェクトがありますが、jarはリポジトリに配置されます。

ただし、pom.xmlとjarの両方の別のプロジェクトはリポジトリに配置されます。


Jenkinsにプロジェクトがあり、プロモーションプラグインを使用して、deploy:deploy-file目標。

これは、Mavenにある他のいくつかのプロジェクトで機能しますが、このプロジェクトでは失敗します。面白いことに、ファイル(pom.xmlではなく)がアップロードされます。 Mavenリポジトリからアーティファクトを削除し、プロモーションを実行することでこれを確認しました。成果物は、プロモーション後にリポジトリにあります。

ここに私が取得しているログがあります。余分な長い行をできる限り分割しました:

[workspace] $ /bin/bash -xe /opt/Tomcat/Apache-Tomcat-7.0.27/temp/hudson7357923598740079329.sh
+ FILE_LOC=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive
+ mvn deploy:deploy-file
    -Dversion=0.8.0
    -Dfile=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive/metricsdb-etl.jar
    -DpomFile=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive/pom.xml
    -Durl=http://repo.vegicorp.com/artifactory/ext-release-local -DrepositoryId=VegiCorp
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Command Line Spring Batch Module 0.8.0.CI-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ metricsdb-etl ---
Uploading: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.jar
2/38 KB   
4/38 KB   
[...]

Uploaded: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.jar (38 KB at 202.2 KB/sec)
Uploading: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.pom
2/7 KB     
4/7 KB   
[...]

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.243s
[INFO] Finished at: Thu Oct 04 14:38:52 CDT 2012
[INFO] Final Memory: 4M/119M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file
    (default-cli) on project metricsdb-etl: Failed to deploy artifacts:
    Could not transfer artifact com.vegicorp.batch.metricsdb:metricsdb-etl:pom:0.8.0 from/to
    VegiCorp (http://repo.vegicorp.com/artifactory/ext-release-local):
    Failed to transfer file: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.pom.
    Return code is: 409, ReasonPhrase:Conflict. -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.Apache.org/confluence/display/MAVEN/MojoExecutionException
failed build hudson.tasks.Shell@24a6e7f9 SUCCESS
Finished: FAILURE

デバッグフラグ(-X)付きの出力は Pastebin にあります。

34
David W.

問題が見つかりました。実際には2つの問題:

  • リリースリポジトリをセットアップしただけで、リリースリポジトリにスナップショットリリースを保存しようとしました。 Artifactoryは、リリースリポジトリ内のリリースのみを許可するようにセットアップされました。これはArtifactoryの設定で変更できますが、私はこれに反対しました。

  • 僕の pom.xmlに保存しようとしていたバージョンとは異なるバージョンがあります。たとえば、pom.xmlはバージョン2.0であり、リリースを2.0.2として保存しようとしていました。 Artifactoryは、この理由でpom(jarではなく)を拒否しました。

「POM整合性チェックを抑制する」かどうかを尋ねるArtifactory設定(リポジトリごと)を見つけました。このチェックボックスをオンにすると、バージョンを1に設定できますが、Pomに別のことを言わせます。

また、Mavenの "settings.xml"ファイルを変更して、リリースリポジトリとスナップショットリポジトリの両方を許可する必要がありました。スナップショットリポジトリへのURLも変更する必要があります。

私たちはしばらく(Ivyをsnapshotコンセプトを持っていない)しか使用していなかったため、リリースリポジトリに物を置くだけでした。これはMavenプロジェクトであり、開発者はPOMのバージョンをSNAPSHOTとしてマークしました。

残念ながら、Mavenのドキュメントはかなり貧弱であり、Mavenに関する良い本はまだありません。さらに悪いことに、エラーメッセージは単純に貧弱です。 「409、ReasonPhrase:Conflict。-> [Help 1]」はどういう意味ですか?

Ivyのドキュメントはそれほど優れているわけではありませんが、 Ant in Action にはIvyの使用に関する優れたセクションがあります。

34
David W.

スナップショットリポジトリに公開する場合は、バージョンの一部として-SNAPSHOTを含めるようにしてください。

21
B5A7

うん...同じエラーの複数の理由。誰かを助けるかもしれない

1. Login as Admin to Artifactory
2. Configuration -> Repositories
3. Edit the Local Repository ---> Suppress POM Consistency Checks

これで問題が解決します。正しいアプローチかどうか?

4
Shineed Basheer

私もこの問題に直面しており、その理由は、親プロジェクトがスナップショットリポジトリに展開されなかったことにあります。親フォルダーでmvn deployを実行すると、問題は解決しました。

4
Yingchu

そのエラーメッセージもありました。私にとっての問題は、サーバーのセットアップがSNAPSHOTではなくリリースのみを受け入れることでした。スナップショットをPOMから削除した後、正常に機能しました。

2
wouter

私の場合、jarファイル(外部、同じディレクトリ内)に関連付けられたPOMファイルは、それ自体に依存していました。これは、アーティファクトに読み込むために必要なサードパーティからのオフラインzipリポジトリでした。

POMファイルを変更し、自己依存を削除し、パッケージ情報が正しいことを確認しました。その後、問題なくデプロイされた成果物。ビルドで修正できるように、ベンダーにメールを送信しました。

1
Bill Dolan

私もこの問題を抱えていましたが、デプロイしようとしているリポジトリにルールを含める/除外する設定があり、デプロイがそれらのルールと一致しないことが判明しました。

私の解決策は、**/*をインクルードルールとして持つ新しいリポジトリ(および他のリポジトリからのパターンを、それらを分離するためのエクスクルードルールとして)に配置することでした。

1
user11348207

リモートリポジトリのスペースがいっぱいになっている可能性があります。すべての技術的時間を無駄にする前に、それを確認してください。その論理的な問題を考えて2-3時間を無駄にしました。

0
anuj pradhan

私は同じ問題を経験しています。 (TL; DR:最終行を参照してください)

JenkinsからArtifactoryへのデプロイ中に、時々(魔法!)409-競合エラーがArtifactoryログに次のエラーメッセージとともに表示されました。

[警告](o.a.e.UploadServiceImpl:239)-HTTPエラーコード409の送信:チェックサムポリシー 'LocalRepoChecksumPolicy:CLIENT'はアーティファクト 'gradle-integration:com.redacted.Java/fooProject/123/foo-123.jar'を拒否しました。チェックサム情報:ChecksumsInfo {checksums = {SHA-1 = ChecksumInfo {type = SHA-1、original = 'da39a3ee5e6b4b0d3255bfef95601890afd80709'、actual = '1459689f0be058f4ecef7e6fe3576f1550a8f898'98d9898d9898'98d9898d9898d9898'98d9898d9898'98d9898d00d9898d9898d9898d9898'98d9898'98d9898'98d9898'98d98'98'98'98'98'98' ' 14c7a498de028d6eb5882b3c698bc456 '}}}。

訓練された目が気づくかもしれません:MD5#d41d8cd98f00b204e9800998ecf8427eは、空のファイルまたは文字列のチェックサムです。

これは、次のことを行う必要があることを意味します。パブリッシュフォルダーのアーティファクトを準備するコピージョブが終了していないため、チェックサムの計算時にファイルが空でした。

ただし、デプロイが発生すると、ファイルがそこにあったため、Artifactoryは誤ったチェックサムを受け取り、エラーコード409でファイルを正しく拒否します。

解決策(簡単です):展開ジョブを開始する前に、ファイルが確実にそこにあることを100%確認してください(一時停止または適切なロジックを追加します)。

0
fl0w