เกิดข้อผิดพลาดขณะปรับใช้อาร์ติแฟกต์ใน Nexus


102

ฉันได้รับข้อผิดพลาดเมื่อปรับใช้อาร์ติแฟกต์ในที่เก็บของฉันเองในเซิร์ฟเวอร์ Nexus: "ไม่สามารถปรับใช้อาร์ติแฟกต์: ไม่สามารถโอนอาร์ติแฟกต์" "ไม่สามารถโอนไฟล์ http: /// my_artifact โค้ดส่งคืนคือ: 400"

ฉันมี Nexus ที่ทำงานด้วย my_repo ที่เก็บที่กำหนดเองหนึ่งที่พร้อมกับการกำหนดค่าท้องถิ่น maven ถัดไป:

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)
  • ที่เก็บไม่เหมาะสำหรับการปรับใช้อาร์ติแฟกต์ที่เกี่ยวข้อง (เช่นรีลีส repo สำหรับเวอร์ชันสแน็ปช็อตที่เก็บพร็อกซีหรือกลุ่มแทนที่จะเป็นที่เก็บที่โฮสต์)

ตรวจสอบสิ่งเหล่านี้และหากคุณยังคงประสบปัญหาให้รายละเอียดเพิ่มเติมที่นี่


44
ฉันเปลี่ยนเวอร์ชันของสิ่งประดิษฐ์ของฉันเป็น SNAPSHOT จากนั้นปรับใช้และทุกอย่างก็โอเค จากนั้นฉันก็รู้ว่าฉันกำลังพยายามปรับใช้กับกลุ่ม Nexus (ไม่ใช่ที่เก็บ Nexus) สาเหตุของปัญหาของฉันคือ 'url ไปยังที่เก็บ nexus ของฉันไม่ถูกต้อง'
acimutal

5
สำคัญ: "อาร์ติแฟกต์ถูกปรับใช้กับเวอร์ชันนั้นแล้วหากเป็นรีลีส (ไม่ใช่เวอร์ชัน -SNAPSHOT)"
Bhushan

1
บันทึกวันของฉัน ... ฉันลบคำ -SNAPSHOT ออกจากเวอร์ชันใน pom.xml นั่นคือสาเหตุที่ไม่สามารถปรับใช้กับ nexus ได้ ... ฉันเพิ่มคำ SNAPSHOT กลับไปและมันใช้งานได้ ..
venugopal

3
จากประสบการณ์ของฉันข้อมูลรับรองไม่ถูกต้องส่งผลให้เป็น 401 ไม่ใช่ 400 การต่อท้ายชื่อเวอร์ชันด้วย "-SNAPSHOT" ช่วยแก้ปัญหาให้ฉันได้
Marcus Junius Brutus

1
คุณสามารถเปลี่ยนนโยบายการปรับใช้ที่เก็บของคุณเพื่อเปิดใช้งานการปรับใช้ใหม่
Furqan

35

เพียงเพื่อสร้างคำตอบแยกต่างหาก คำตอบนั้นพบได้จริงในความคิดเห็นสำหรับคำตอบที่ยอมรับ

-SNAPSHOTลองเปลี่ยนรุ่นของสิ่งประดิษฐ์ของคุณจบลงด้วยการ


2
ไม่มีคุณพลาดประเด็นทั้งหมดอ่านความคิดเห็นอย่างละเอียดที่กล่าวถึง "ดังนั้นสาเหตุของปัญหาของฉันคือ 'url to my nexus repository ผิด'" และทำความเข้าใจเกี่ยวกับความหมายของ 'รหัสย้อนกลับคือ: 400' (ก่อนที่คุณจะคัดลอกความคิดเห็นของใครบางคนเป็นคำตอบ)
kuhajeyan

13
แค่อยากแสดงความคิดเห็นที่นี่ตั้งแต่ฉันเข้ามาที่หน้านี้ในการค้นหาของฉัน ฉันพบข้อผิดพลาด 400 เดียวกันและสิ่งที่ bhagyas กล่าวไว้ที่นี่เป็นกุญแจสำคัญ (แม้ว่าฉันจะไม่รู้ในเวลานั้น) หากปรับใช้กับที่เก็บสแนปชอตเวอร์ชันจะต้องลงท้ายด้วย -SNAPSHOT เวอร์ชันของฉันคือ 1.13.0.SNAPSHOT และฉันใช้เวลาหนึ่งชั่วโมงในการคิดออกว่ามันต้องเป็น 1.13.0-SNAPSHOT
Craig

17

400 คำขอที่ไม่ถูกต้องจะถูกส่งกลับหากคุณพยายามที่จะ:

  1. ปรับใช้สิ่งประดิษฐ์สแน็ปช็อต (หรือเวอร์ชัน) ที่ลงท้ายด้วย-SNAPSHOTไปยังที่เก็บรีลีส
  2. ปรับใช้อาร์ติแฟกต์รีลีส (เวอร์ชันที่ไม่ได้ลงท้ายด้วย-SNAPSHOT ) กับที่เก็บสแน็ปช็อต
  3. ปรับใช้เวอร์ชันเดียวกันของอาร์ติแฟกต์รีลีสมากกว่าหนึ่งครั้งกับที่เก็บรีลีส

12

สาเหตุของปัญหาสำหรับฉันคือ -source.jars ได้รับการอัปโหลดสองครั้ง (ด้วย maven-source-plugin) ดังที่กล่าวไว้ว่าเป็นสาเหตุหนึ่งในคำตอบที่ยอมรับ การเปลี่ยนเส้นทางเพื่อตอบที่ฉันอ้างถึง: ปลั๊กอินรุ่น Maven ล้มเหลว: ซอร์สอาร์ติแฟกต์ถูกปรับใช้สองครั้ง


7

วันนี้ฉันมีปัญหาที่แน่นอนและปัญหาคือเวอร์ชันที่ฉันพยายามจะเผยแพร่: การดำเนินการมีอยู่แล้วในที่เก็บ Nexus

ในกรณีของฉันอาจเกิดจากการตัดการเชื่อมต่อเครือข่ายระหว่างการเรียกใช้รุ่นก่อนหน้านี้: แม้ว่าฉันจะขาดการเชื่อมต่อ แต่ดูเหมือนว่าการเปิดตัวจะสำเร็จ


7

ในกรณีที่เกิดขึ้นไม่บ่อยนักที่คุณจำเป็นต้องทำให้อาร์ติแฟกต์ SAME STABLE ใช้งานได้อีกครั้งกับ Nexus มันจะล้มเหลวโดยค่าเริ่มต้น หากคุณลบอาร์ติแฟกต์ออกจาก Nexus (ผ่านทางเว็บอินเตอร์เฟส) เพื่อจุดประสงค์ในการปรับใช้อีกครั้งการปรับใช้จะยังคงล้มเหลวเนื่องจากเพียงแค่ลบเช่น jar หรือ pom ไม่ได้ล้างไฟล์อื่น ๆ ที่ยังคงอยู่ในไดเร็กทอรี คุณต้องเข้าสู่กล่องและลบไดเร็กทอรีทั้งหมด


2
หากต้องการเพิ่มสิ่งนี้หากคุณไม่มีสิทธิ์เข้าถึงเซิร์ฟเวอร์แบบโต้ตอบ (ฉันไม่ได้เป็นกล่องที่มีการจัดการ) คุณสามารถลบอาร์ติแฟกต์ที่กระทำผิดได้ด้วย HTTP DELETE ฉันใช้ PostMan เพื่อจุดประสงค์นี้
Nathan Russell

ฉันไม่แน่ใจว่าเป็นเพราะฉันใช้ปลั๊กอิน S3 blobstore แต่ฉันไม่เห็นโครงสร้างไดเร็กทอรีที่ตรงกับโครงสร้าง repo มีเคล็ดลับในการระบุว่าจะลบ dirs ใดบ้าง? ไฟล์ทั้งหมดของฉันตั้งชื่อด้วยแฮช ไดเรกทอรีมีรูปแบบcontent/vol-{01-43}/chap-{01-47}
majikman

คุณยังสามารถลบไฟล์ทั้งหมดสำหรับรีลีสได้โดยไปที่ไดเร็กทอรีรีลีสจากที่เก็บแทนที่จะค้นหาอาร์ติแฟกต์จากการค้นหาประเภท GAV ในมุมมองที่เก็บคุณสามารถคลิกขวาที่ไดเร็กทอรีเพื่อรับการดำเนินการลบสำหรับไฟล์ทั้งหมดที่ GAV นั้น
Christian Trimble

3

วันนี้ฉันมีปัญหาเดียวกันกับการเพิ่ม "รหัสส่งคืนคือ: 400, ReasonPhrase: คำขอไม่ถูกต้อง" ซึ่งกลายเป็นปัญหา "อาร์ติแฟกต์ถูกปรับใช้กับเวอร์ชันนั้นแล้วหากเป็นรุ่น" จากคำตอบด้านบนป้อนคำอธิบายลิงก์ที่นี่

วิธีแก้ปัญหาหนึ่งที่ยังไม่ได้กล่าวถึงคือการกำหนดค่า Nexus เพื่ออนุญาตให้ใช้งานได้อีกครั้งในที่เก็บ Release อาจไม่ใช่แนวทางปฏิบัติที่ดีที่สุดเนื่องจากมีการตั้งค่านี้ด้วยเหตุผลคุณสามารถไปที่ "การตั้งค่าการเข้าถึง" ในแท็บ "การกำหนดค่า" ที่เก็บ Nexus ของคุณและตั้งค่า "นโยบายการทำให้ใช้งานได้" เป็น "อนุญาตให้ใช้งานใหม่"


3
  • ในแอปพลิเคชันหลัก pom ==> เวอร์ชันใส่แท็กดังนี้: xxx-SNAPSHOT

ตัวอย่าง: 0.0.1-SNAPSHOT

  • "-SNAPSHOT": มีความสำคัญมาก

2

ตรวจสอบให้แน่ใจว่าไม่มีอยู่แล้ว (อาร์ติแฟกต์และเวอร์ชัน) ใน nexus (เป็นรีลีส) ในกรณีนั้นให้ส่งคืนคำขอที่ไม่ถูกต้อง


2

สำหรับข้อผิดพลาด 400 ให้ตรวจสอบที่เก็บ "Deployment policy" โดยปกติจะเป็น "Disable redeploy" เกือบตลอดเวลาที่เวอร์ชันไลบรารีของคุณมีอยู่แล้วนั่นคือสาเหตุที่คุณได้รับข้อความ "ไม่สามารถใส่ ' https: //yoururl/some.jar ' ได้รับรหัสสถานะ 400 จากเซิร์ฟเวอร์: ที่เก็บไม่อนุญาตให้อัปเดตเนื้อหา:" your ชื่อที่เก็บ "

ดังนั้นคุณมีทางเลือกในการแก้ไขปัญหานี้ 1- อนุญาตให้ใช้งานซ้ำ 2- ลบเวอร์ชันออกจากที่เก็บของคุณซึ่งคุณกำลังพยายามอัปโหลด 3- เปลี่ยนหมายเลขเวอร์ชัน


โดยปกติแล้วการอนุญาตให้ใช้งานที่เก็บข้อมูลรีลีสซ้ำไม่ถือว่าเป็นแนวทางปฏิบัติที่ดี อย่าทำอย่างนั้นโดยไม่พิจารณา
Itaypk

1
@Itaypk คุณพูดถูกนั่นคือเหตุผลที่ฉันแนะนำคำแนะนำอื่น ๆ ในความคิดของฉันการเปลี่ยนเวอร์ชันดีกว่า
Furqan

1

หากคำตอบใด ๆ ข้างต้นได้ผลคุณสามารถสร้างสิ่งประดิษฐ์ใหม่ได้โดยตรงจากด้านผู้ดูแลระบบของ (แนบภาพหน้าจอ NEXUS ด้านล่าง)

  1. Login to nexusUI http: // YOUR_URL: 8081 / nexus (ชื่อผู้ใช้: รหัสผ่านเริ่มต้นของผู้ดูแลระบบ : admin123 )
  2. Click repositories ทางด้านซ้ายจากนั้นคลิก repo เช่น: คลิก release
  3. เลือกartifact Upload(แท็บสุดท้าย)
  4. เลือกGAV definitionเป็นGAV Param- จากนั้นป้อน groupid, artifact id และ version
  5. เลือกไฟล์ Jar
  6. คลิกอัปโหลดอาร์ติแฟกต์ แค่นั้นแหละ !

ตอนนี้คุณจะสามารถเพิ่ม corrsponding ในโครงการของคุณได้แล้ว (ภาพหน้าจอด้านล่าง)

ป้อนคำอธิบายภาพที่นี่


1

สิ่งนี้อาจเกิดขึ้นได้หากคุณมีนโยบายการตั้งชื่อรอบเวอร์ชันโดยห้ามไม่ให้เวอร์ชัน # ที่คุณพยายามทำให้ใช้งานได้ ในกรณีของฉันฉันพยายามอัปโหลดเวอร์ชัน (เพื่อเผยแพร่ repo) 2.0.1แต่พบในภายหลังว่าการกำหนดค่า nexus ของเราไม่อนุญาตสิ่งอื่นใดนอกจากจำนวนเต็มสำหรับการเผยแพร่

ฉันลองใช้เวอร์ชันในภายหลัง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.