Nexus'ta bir yapı dağıtırken hata


102

Nexus sunucusunda kendi depomda bir yapıyı konuşlandırırken bir hata alıyorum: "Yapılar dağıtılamadı: Yapı aktarılamadı" "http: /// my_artifact dosyası aktarılamadı. Dönüş kodu: 400"

Bir sonraki maven yerel yapılandırmasıyla my_repo özel deposu ile çalışan Nexus'um var:

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>
  • kullanıcının my_repo'ya oluşturma / okuma / yazma izinleri var -

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>

ve sonra yürütürüm

mvn deploy

ve hatayı alın. Herhangi bir fikir?


2
HTTP 400, "hatalı istek" anlamına gelir. Sanırım URL'lerden biri yanlış.
Mark O'Connor

benim için sorun, anlık görüntü sürümü olmamasıydı.
maveroid

Yanıtlar:


156

Aklıma gelen birkaç şey:

  • kullanıcı kimlik bilgileri yanlış
  • sunucuya url yanlış
  • kullanıcının dağıtım havuzuna erişimi yok
  • kullanıcının belirli bir havuz hedefine erişimi yok
  • yapı bir sürümse (-SNAPSHOT sürümü değil) bu sürümle zaten konuşlandırılmış
  • havuz, ilgili yapının konuşlandırılması için uygun değil (örneğin, barındırılan bir depo yerine anlık görüntü sürümü, proxy deposu veya grup için yayın deposu)

Bunları kontrol edin ve hala sorun yaşıyorsanız burada daha fazla ayrıntı sağlayın.


44
Yapıtımın sürümünü SNAPSHOT olarak değiştirdim ve sonra dağıttım ve her şey yolundaydı. Sonra bir Nexus grubuna (Nexus deposuna değil) konuşlandırmaya çalıştığımı fark ettim, bu yüzden sorunumun nedeni 'nexus
depomun url'si

5
ÖNEMLİ: "yapı, bir sürümse (-SNAPSHOT sürümü değilse) bu sürümle zaten konuşlandırılmış"
Bhushan

1
Günümü kurtardım ... -SNAPSHOT kelimesini pom.xml'deki sürümden kaldırdım, bu yüzden nexus'a dağıtılamıyor ... SNAPSHOT kelimesini geri ekledim ve işe yaradı ..
venugopal

3
Deneyimlerime göre, yanlış kimlik bilgileri 400 değil 401 ile sonuçlanıyor. Sürüm adını "-SNAPSHOT" ile sonlandırmak sorunu benim için çözdü.
Marcus Junius Brutus

1
yeniden dağıtımı etkinleştirmek için deponuzun dağıtım politikasını değiştirebilirsiniz
Furqan

35

Sadece ayrı bir cevap oluşturmak için. Cevap aslında kabul edilen cevap için bir yorumda bulunur.

Yapıtınızın sürümünü bitecek şekilde değiştirmeyi deneyin -SNAPSHOT.


2
Hayır, tüm noktayı kaçırıyorsunuz, "bu yüzden sorunumun nedeni şuydu:" bağlantı noktası depomun url'si yanlıştı ". Ve 'Dönüş kodu: 400' olmasının ne anlama geldiği hakkında biraz fikir edinin (sadece birisinin yorumlarını cevap olarak kopyalamadan önce)
kuhajeyan

13
Aramamda bu sayfaya geldiğimden beri burada yorum yapmak istedim. Aynı 400 hatasıyla karşılaştım ve bhagyas'ın burada söylediği şey anahtardır (o sırada farkında değildim), eğer bir anlık görüntü havuzuna konuşlandırıyorsanız sürüm -SNAPSHOT ile bitmelidir. Benim sürümüm 1.13.0.SNAPSHOT idi ve 1.13.0-SNAPSHOT olması gerektiğini anlamam bir saatimi aldı.
Craig

17

Aşağıdakileri yapmaya çalışırsanız 400 Hatalı İstek iade edilecektir:

  1. -SNAPSHOT ile biten bir anlık görüntü yapısını (veya sürümünü) bir yayın havuzuna dağıtın
  2. Bir dağıtma bırakma objeyi (sürüm değil biten -SNAPSHOT a) anlık depo
  3. Dağıtma aynı bir sürümünü sürüm a kereden fazla eser bırakma depo


7

Bugün tam olarak bu sorunu yaşadım ve sorun, yayınlamaya çalıştığım sürüm şuydu: perform zaten Nexus deposundaydı.

Benim durumumda bu, muhtemelen daha önceki bir sürüm çağrısı sırasında ağ bağlantısının kesilmesinden kaynaklanıyordu: perform. Bağlantımı kaybetmeme rağmen, serbest bırakma başarılı oldu.


7

Nadiren de olsa, AYNI STABİL yapıyı Nexus'a yeniden dağıtmanız gerektiğinde, varsayılan olarak başarısız olur. Daha sonra yapıyı tekrar dağıtmak amacıyla Nexus'tan (web arayüzü aracılığıyla) silerseniz, uygulama başarısız olur çünkü örneğin jar veya pom'un kaldırılması dizinde yer alan diğer dosyaları temizlemeyecektir. Kutuya giriş yapmanız ve dizini bütünüyle silmeniz gerekir.


2
Buna ek olarak, sunucuya etkileşimli erişiminiz yoksa (ben yok - bu yönetilen bir kutu), sorun teşkil eden yapıyı bir HTTP SİLME ile silebilirsiniz. PostMan'i bu amaçla kullanıyorum
Nathan Russell

S3 blobstore eklentisini kullandığım için mi emin değilim, ancak repo yapısıyla eşleşen bir dizin yapısı görmüyorum. Hangi dizinlerin silineceğini belirlemek için bir numara var mı? Tüm dosyalarım bir karma ile adlandırılır. Dizinler formattadırcontent/vol-{01-43}/chap-{01-47}
majikman

Bir GAV türü aramadan yapıyı aramak yerine, arşivden yayın dizinine giderek bir sürümün tüm dosyalarını silebilirsiniz. Depo görünümünde, o GAV'daki tüm dosyalar için bir silme eylemi almak üzere dizine sağ tıklayabilirsiniz.
Christian Trimble

3

Bugün aynı sorunu "Dönüş kodu: 400, ReasonPhrase: Hatalı İstek" ekleyerek yaşadım. Yukarıdaki yanıttan "yapı, bu sürümle zaten dağıtılmış" sorun olduğu ortaya çıktı. yukarıdaki yanıttan bağlantı açıklamasını girin

Henüz bahsedilmeyen bir çözüm, Nexus'u bir Sürüm havuzunda yeniden konuşlandırmaya izin verecek şekilde yapılandırmaktır. Belki bir en iyi uygulama olmayabilir, çünkü bunun bir nedeni var, yine de Nexus depolarınızın "Yapılandırma" sekmesindeki "Erişim Ayarları" na gidip "Dağıtım İlkesini" "Yeniden Dağıtıma İzin Ver" olarak ayarlayabilirsiniz.


3
  • üst pom uygulamasına ==> Sürüm etiketi aşağıdaki gibi yerleştirin: xxx-SNAPSHOT

örnek: 0.0.1-SNAPSHOT

  • "-SNAPSHOT": çok önemli

2

Bağlantı noktasında (sürüm olarak) halihazırda (yapı ve sürüm) olmadığından emin olun. Bu durumda Hatalı İstek'i iade edin.


2

400 hatası için, "Deployment policy" havuzunun genellikle "Yeniden konuşlandırmayı devre dışı bırak" ı kontrol edin. Kitaplık sürümünüz çoğu zaman zaten oradadır, bu nedenle "PUT koyulamadı ' https: //yourl/some.jar '. Sunucudan 400 durum kodu alındı: Depo varlıkların güncellenmesine izin vermiyor:" depo adı "

Yani, bunu çözmek için birkaç seçeneğiniz var. 1- yeniden konuşlandırmaya izin verin 2- yüklemeye çalıştığınız sürümü deponuzdan silin 3- sürüm numarasını değiştirin


Sürümler deposu için yeniden konuşlandırmaya izin vermek genellikle iyi bir uygulama olarak görülmez. Bunu düşünmeden yapma.
Itaypk

1
@Itaypk haklısın bu yüzden birkaç öneri daha önerdim. Bence versiyonu değiştirmek daha iyi.
Furqan

1

Yukarıdaki yanıtlardan herhangi biri işe yaradıysa, doğrudan yönetici tarafından (aşağıda NEXUS Ekran görüntüsü eklenmiştir) yeni yapı oluşturabilirsiniz.

  1. Login to nexusUI http: // YOUR_URL: 8081 / nexus (kullanıcı adı: yönetici varsayılan şifre: admin123 )
  2. Click repositories sol tarafta depoyu tıklayın, Örneğin: serbest bırak'a tıklayın.
  3. artifact Upload(Son sekme) öğesini seçin .
  4. Seç GAV definitionolarak GAV ParamSonra groupid, yapay kimliği ve sürümünü girin -.
  5. Jar dosyasını seçin.
  6. Yapıyı yükle'yi tıklayın. Bu kadar !

Artık projenize karşılık gelenleri ekleyebileceksiniz. (Aşağıdaki ekran görüntüsü)

görüntü açıklamasını buraya girin


1

Dağıtmaya çalıştığınız sürüm numarasını yasaklayan sürümle ilgili bir adlandırma politikanız varsa da bu durum ortaya çıkabilir. Benim durumumda bir sürüm yüklemeye çalışıyordum (depoyu yayınlamak için) 2.0.1ancak daha sonra bağlantı noktası yapılandırmamızın sürümler için tam sayı dışında hiçbir şeye izin vermediğini öğrendim.

Daha sonra sürümle denedim 2ve başarıyla uyguladım.

Hata mesajı kesinlikle yardımcı olmuyor:

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

Daha iyi bir mesaj olabilirdi version 2.0.1 violates naming policy


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.