Kesalahan saat menerapkan artefak di Nexus


102

Saya mendapatkan kesalahan saat menerapkan artefak di repositori saya sendiri di server Nexus: "Gagal menerapkan artefak: Tidak dapat mentransfer artefak" "Gagal mentransfer file http: /// my_artifact. Kode yang dikembalikan adalah: 400"

Saya menjalankan Nexus dengan satu repositori khusus my_repo dengan konfigurasi lokal maven berikutnya:

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>
  • pengguna memiliki izin untuk membuat / membaca / menulis ke 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>

dan kemudian saya mengeksekusi

mvn deploy

dan dapatkan errornya. Ada ide?


2
HTTP 400 berarti "permintaan buruk". Saya menduga salah satu URL salah.
Mark O'Connor

bagi saya masalahnya adalah itu bukan versi snapshot.
maveroid

Jawaban:


156

Beberapa hal yang dapat saya pikirkan:

  • kredensial pengguna salah
  • url ke server salah
  • pengguna tidak memiliki akses ke repositori penerapan
  • pengguna tidak memiliki akses ke target repositori tertentu
  • artefak sudah di-deploy dengan versi itu jika itu adalah rilis (bukan versi -SNAPSHOT)
  • repositori tidak cocok untuk penerapan artefak masing-masing (misalnya rilis repo untuk versi snapshot, repo proxy atau grup alih-alih repositori yang dihosting)

Periksa itu dan jika Anda masih mengalami masalah, berikan detail lebih lanjut di sini.


44
Saya mengubah versi artefak saya menjadi SNAPSHOT dan kemudian menerapkan dan semuanya baik-baik saja. Kemudian saya menyadari bahwa saya mencoba menerapkan ke grup Nexus (bukan repositori Nexus), jadi penyebab masalah saya adalah: 'url ke repositori nexus saya salah'
acimutal

5
PENTING: "artefak sudah digunakan dengan versi itu jika itu adalah rilis (bukan versi -SNAPSHOT)"
Bhushan

1
Menyelamatkan hari saya ... Saya menghapus kata -SNAPSHOT dari versi di pom.xml, itulah mengapa tidak dapat diterapkan ke nexus ... Saya menambahkan kata SNAPSHOT kembali, dan berhasil ..
venugopal

3
Menurut pengalaman saya, kredensial yang salah menghasilkan 401, bukan 400. Mengakhiri nama versi dengan "-SNAPSHOT" memperbaiki masalah saya.
Marcus Junius Brutus

1
Anda cukup mengubah kebijakan penerapan repositori Anda untuk mengaktifkan penerapan ulang
Furqan

35

Hanya untuk membuat jawaban terpisah. Jawabannya sebenarnya ada di komentar untuk jawaban yang diterima.

Coba ubah versi artefak Anda untuk mengakhirinya -SNAPSHOT.


2
Tidak, Anda melewatkan keseluruhan poin, baca komentar dengan hati-hati yang menyebutkan "jadi penyebab masalah saya adalah: 'url ke repositori nexus saya salah'". Dan dapatkan beberapa ide tentang apa yang dimaksud dengan 'Kode
pengembalian

13
Hanya ingin memberi komentar di sini karena saya membuka halaman ini dalam pencarian saya. Saya mengalami kesalahan 400 yang sama dan apa yang dikatakan bhagya di sini adalah kuncinya (meskipun saya tidak menyadarinya saat itu), jika menerapkan ke repositori snapshot, versi HARUS diakhiri dengan -SNAPSHOT. Versi saya adalah 1.13.0.SNAPSHOT dan saya butuh satu jam untuk mengetahui bahwa itu harus 1.13.0-SNAPSHOT.
Craig

16

400 Permintaan Buruk akan dikembalikan jika Anda mencoba untuk:

  1. Deploy artefak snapshot (atau versi) yang diakhiri dengan -SNAPSHOT ke repositori rilis
  2. Terapkan artefak rilis (versi tidak diakhiri dengan -SNAPSHOT ) ke repositori snapshot
  3. Menerapkan versi yang sama dari artefak rilis lebih dari sekali ke repositori rilis


7

Saya mengalami masalah yang sama persis hari ini dan masalahnya adalah versi yang saya coba rilis: perform sudah ada di repo Nexus.

Dalam kasus saya, ini kemungkinan karena jaringan terputus selama permintaan rilis sebelumnya: lakukan. Meskipun saya kehilangan koneksi, tampaknya rilis berhasil.


7

Dalam kasus yang jarang terjadi ketika Anda perlu menerapkan ulang artefak STABIL YANG SAMA ke Nexus, ini akan gagal secara default. Jika Anda kemudian menghapus artefak dari Nexus (melalui antarmuka web) untuk tujuan menerapkannya lagi, penerapan masih akan gagal, karena hanya menghapus misalnya jar atau pom tidak menghapus file lain yang masih ada di direktori. Anda harus masuk ke kotak dan menghapus direktori secara keseluruhan.


2
Hanya untuk menambahkan ini, jika Anda tidak memiliki akses interaktif ke server (I dont - ini adalah kotak yang dikelola), Anda dapat menghapus artefak yang melanggar dengan HTTP DELETE. Saya menggunakan PostMan untuk tujuan ini
Nathan Russell

Saya tidak yakin apakah itu karena saya menggunakan plugin S3 blobstore, tetapi saya tidak melihat struktur direktori yang cocok dengan struktur repo. Apakah ada trik untuk mengidentifikasi direktori mana yang akan dihapus? Semua file saya diberi nama dengan hash. Format direktori ini adalahcontent/vol-{01-43}/chap-{01-47}
majikman

Anda juga dapat menghapus semua file untuk sebuah rilis dengan menavigasi ke direktori rilis dari repositori, daripada mencari artefak dari pencarian jenis GAV. Dalam tampilan repositori, Anda dapat mengklik kanan pada direktori untuk mendapatkan tindakan hapus semua file di GAV tersebut.
Christian Trimble

3

Saya mengalami masalah yang sama hari ini dengan penambahan "Kode pengembalian: 400, ReasonPhrase: Permintaan Buruk". yang ternyata masalah "artefak sudah diterapkan dengan versi itu jika itu adalah rilis" masalah dari jawaban di atas masukkan deskripsi tautan di sini

Satu solusi yang belum disebutkan adalah mengonfigurasi Nexus untuk memungkinkan penerapan ulang ke dalam repositori Rilis. Mungkin bukan praktik terbaik, karena ini disetel karena suatu alasan, Anda tetap dapat membuka "Access Settings" di "Configuration" -Tab repositori Nexus dan menyetel "Deployment Policy" ke "Allow Redeploy".


3
  • di aplikasi induk pom ==> Versi letakkan tag sebagai berikut: xxx-SNAPSHOT

contoh: 0.0.1-SNAPSHOT

  • "-SNAPSHOT": sangat penting

2

Pastikan bahwa belum ada (artefak dan versi) di nexus (sebagai rilis). Dalam hal itu, kembalikan Permintaan Buruk.


2

Untuk 400 error, periksa repositori "Deployment policy" biasanya "Disable redeploy". Sebagian besar versi perpustakaan Anda sudah ada, itulah sebabnya Anda menerima pesan "Tidak dapat PUT meletakkan ' https: //yoururl/some.jar '. Menerima kode status 400 dari server: Repositori tidak mengizinkan pembaruan aset:" milik Anda nama repositori "

Jadi, Anda memiliki beberapa opsi untuk mengatasi ini. 1- Izinkan penerapan ulang 2- hapus versi dari repositori Anda yang Anda coba unggah 3- ubah nomor versi


Mengizinkan penerapan ulang untuk rilis repositori biasanya tidak dianggap sebagai praktik yang baik. Jangan lakukan itu tanpa pertimbangan.
Itaypk

1
@ Itaypk Anda benar itulah sebabnya saya menyarankan beberapa saran lain. Menurut saya, mengubah versi itu lebih baik.
Furqan

1

Jika salah satu jawaban di atas berhasil, Anda dapat membuat artefak baru langsung dari sisi admin (NEXUS Screen shot terlampir di bawah).

  1. Login to nexusUI http: // YOUR_URL: 8081 / nexus (nama pengguna: sandi default admin : admin123 )
  2. Click repositories disebelah kiri lalu klik repo, Misal: klik release.
  3. Pilih artifact Upload(tab terakhir).
  4. Pilih GAV definitionsebagaiGAV Param - Kemudian masukkan groupid, id artefak dan versinya.
  5. Pilih file Jar.
  6. Klik unggah artefak. Itu dia !

Sekarang Anda akan dapat menambahkan penyesuaian dalam proyek Anda. (Tangkapan layar di bawah)

masukkan deskripsi gambar di sini


1

Ini juga dapat terjadi jika Anda memiliki kebijakan penamaan seputar versi, yang melarang versi # yang Anda coba terapkan. Dalam kasus saya, saya mencoba mengunggah versi (untuk merilis repo)2.0.1 tetapi kemudian menemukan bahwa konfigurasi nexus kami tidak mengizinkan apa pun selain bilangan bulat untuk rilis.

Saya mencoba nanti dengan versi 2 dan berhasil menerapkannya.

Pesan kesalahan pasti tidak membantu:

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

Pesan yang lebih baik bisa saja version 2.0.1 violates naming policy


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.