คำสั่ง Maven เพื่อพิจารณาไฟล์ settings.xml ที่ Maven ใช้


คำตอบ:


333

เริ่ม maven ด้วยอ็อพชัน -X (debug) และตรวจสอบจุดเริ่มต้นของเอาต์พุต ควรมีสิ่งเช่นนี้:

...
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from c:\....\apache-maven-3.0.3\conf\settings.xml
[DEBUG] Reading user settings from c:\....\.m2\settings.xml
[DEBUG] Using local repository at C:\....\repository
...

(ฉันลบชื่อไดเรกทอรีดั้งเดิม)


10
บางทีนี่อาจไม่ได้อยู่ในผลลัพธ์การแก้ปัญหาจนกว่า maven 3 ได้รับการปล่อยตัว แต่โพสต์ของคุณบาง 2.5 ปีต่อมาในที่สุดก็เป็นคำตอบที่แน่นอนฉันกำลังมองหา (ขออภัยสำหรับความล่าช้า 6 เดือนในการสังเกตเห็น)
harschware

เวอร์ชันของ maven ที่ฉันใช้อยู่ maven2.x ไม่ได้แสดงรายละเอียดที่สำคัญนี้เมื่อใช้แฟล็ก -B ... โชคไม่ดีถ้าคุณพยายามที่จะแก้ไขปัญหาที่เกิดขึ้นกับเซิร์ฟเวอร์เจนกินส์
Cognitiaclaeves

168

ความคิดเห็นของคุณถึงคำตอบของ cletus (ถูกต้อง) แสดงว่ามีไฟล์การตั้งค่า Maven หลายไฟล์ที่เกี่ยวข้อง

Maven ใช้ไฟล์การตั้งค่าหนึ่งหรือสองเสมอ จำเป็นต้องใช้การตั้งค่าส่วนกลางที่กำหนดใน ($ {M2_HOME} /conf/settings.xml) ไฟล์การตั้งค่าผู้ใช้ (กำหนดใน $ {user.home} /. m2 / settings.xml) เป็นทางเลือก การตั้งค่าใด ๆ ที่กำหนดไว้ในการตั้งค่าผู้ใช้จะมีความสำคัญเหนือกว่าการตั้งค่าร่วมที่เกี่ยวข้อง

คุณสามารถแทนที่ตำแหน่งของการตั้งค่าส่วนกลางและผู้ใช้จากบรรทัดคำสั่งตัวอย่างต่อไปนี้จะตั้งค่าการตั้งค่าร่วมเป็นc: \ global \ settings.xmlและการตั้งค่าผู้ใช้เป็นc: \ user \ settings.xml :

mvn install --settings c:\user\settings.xml 
    --global-settings c:\global\settings.xml

ขณะนี้ไม่มีคุณสมบัติหรือวิธีการสร้างไฟล์ผู้ใช้และไฟล์การตั้งค่าทั่วโลกที่ใช้กับ Maven ในการเข้าถึงค่าเหล่านี้คุณจะต้องแก้ไข MavenCli และ / หรือ DefaultMavenSettingsBuilder เพื่อฉีดตำแหน่งไฟล์ลงในวัตถุการตั้งค่าที่ได้รับการแก้ไข


1
มันจะดีมากถ้าเราสามารถให้ settings.xml ของผู้ใช้หลายคนได้ดังนั้นเราสามารถใช้มันกับโปรเจ็กต์ต่าง ๆ ได้ ฉันรู้ว่าเราสามารถใช้โปรไฟล์ได้ แต่มันจะดีกว่าถ้ามีไฟล์แยกต่างหาก เป็นไปไม่ได้ใช่มั้ย! ไชโย!
despot

ฉันกำลังมองหาวิธีแก้ไขการแทนที่การตั้งค่าผู้ใช้ของฉันเพียงครั้งเดียวโดยไม่ต้องยุ่งเกี่ยวกับไฟล์ ดังนั้นฉันจึงใช้ไฟล์ส่วนกลางสำหรับการตั้งค่าผู้ใช้ เช่น - การตั้งค่า c: \ global \ settings.xml วิธีนี้ไฟล์ผู้ใช้ถูกละเว้น
msp

@dotot ช้าไปงานปาร์ตี้ แต่ในแบบที่คุณสามารถทำได้ผ่านการกำหนดโปรไฟล์จำนวนมากและ 'ทริกเกอร์' ที่กำหนดเอง: maven.apache.org/settings.html#Activati ​​on
แยกไม่ออก

มันมักจะขอ pom ในโฟลเดอร์ปัจจุบัน "เป้าหมายที่คุณระบุต้องการโครงการที่จะดำเนินการ แต่ไม่มี POM ในไดเรกทอรีนี้ (/) โปรดตรวจสอบว่าคุณได้เรียก Maven จากไดเรกทอรีที่ถูกต้อง -> [ความช่วยเหลือ 1]"
Nilesh

137

คุณสามารถใช้ปลั๊กอินช่วยเหลือ mavenเพื่อบอกเนื้อหาของผู้ใช้และไฟล์การตั้งค่าทั่วโลกของคุณ

mvn help:effective-settings

จะขอ Maven จะคายออกการตั้งค่าของผู้ใช้และทั่วโลกรวมกัน


มันช่วยให้ฉันอัปเดต maven repo เก่าrepo1.maven.org/maven2เป็นsearch.maven.org
Ricardo

40

นี่คือไฟล์กำหนดค่าสำหรับ Maven สามารถระบุได้สองระดับ:

  1. ระดับผู้ใช้ ไฟล์ settings.xml นี้มีการกำหนดค่าสำหรับผู้ใช้คนเดียวและโดยปกติจะมีให้ใน $ {user.home} /. m2 / settings.xml

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
    
  2. ระดับโลก ไฟล์ settings.xml นี้มีการกำหนดค่าสำหรับผู้ใช้ Maven ทั้งหมดบนเครื่อง (สมมติว่าพวกเขาทั้งหมดใช้การติดตั้ง Maven เดียวกัน) โดยปกติจะมีให้ใน $ {maven.home} /conf/settings.xml

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml
    

1
สถานที่ให้บริการคือ M2_HOME ไม่ใช่ maven.home
ผู้ขายที่สมบูรณ์

มันไม่สำคัญ ถ้าคุณตั้งค่าตัวแปรสภาพแวดล้อมโดยใช้ maven.home ก็จะไม่เป็นปัญหา
firstthumb

24

M2_HOMEตัวแปรสภาพแวดล้อมสำหรับคนทั่วโลก ดูการอ้างอิงการตั้งค่า :

settingsองค์ประกอบใน settings.xmlแฟ้มที่มีองค์ประกอบที่ใช้ในการกำหนดค่าที่กำหนดค่าดำเนินการ Maven ในรูปแบบต่างๆเช่นpom.xmlแต่ไม่ควรนำมารวมไว้ในโครงการที่เฉพาะเจาะจงใด ๆ หรือแจกจ่ายให้กับผู้ชม สิ่งเหล่านี้รวมถึงค่าต่างๆเช่นที่ตั้งโลคัลที่เก็บโลคัลเซิร์ฟเวอร์ที่เก็บข้อมูลรีโมตสำรองและข้อมูลการพิสูจน์ตัวตน มีสองตำแหน่งที่ไฟล์ settings.xml อาจทำงานอยู่:

  • การติดตั้ง Maven: $M2_HOME/conf/settings.xml
  • การติดตั้งของผู้ใช้: ${user.home}/.m2/settings.xml

หากคำตอบนี้เป็นการบอกเป็นนัยว่าการกำหนดพื้นที่เก็บข้อมูลทำได้โดยการตรวจสอบสภาพแวดล้อมเท่านั้นนี่คือคำตอบที่ถูกต้อง ฉันหวังว่าจะเรียนรู้เกี่ยวกับสวิตช์บรรทัดคำสั่งหรือสิ่งที่ให้รายการที่ชัดเจนของเส้นทางที่ผ่านการรับรองสำหรับไฟล์ settings.xml ทั้งหมดที่ใช้ ... ฉันคิดว่าอาจไม่มีกลไกดังกล่าว
harschware

3
+1 คำตอบ Cletus ฉันคิดว่ามันคุ้มค่าที่จะพูดถึงบรรทัดถัดไปจากลิงก์ "อ้างอิงการตั้งค่า" ของคุณ:the former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.
เควินเมเรดิ ธ

จำเป็นต้องมีการกำหนดค่าเฉพาะเครื่องจักรเพื่อค้นหาที่เก็บส่วนตัวทำให้ฉันเจ็บปวดมาก ฉันรู้ว่านี่คือสถานะที่เป็นอยู่ในระบบนิเวศ Java แต่มันนำไปสู่การตั้งค่าการสร้างที่ไม่สามารถพิสูจน์ได้อย่างน่ากลัว
jpierson

24

วิธีที่รวดเร็วและสกปรกเพื่อพิจารณาว่า Maven ใช้ settings.xml ที่ต้องการหรือไม่นั้นจะทำให้ xml เป็นโมฆะและเรียกใช้คำสั่ง maven ที่ปลอดภัยที่ต้องการ settings.xml

หากมันอ่านsettings.xml นี้ Maven จะรายงานข้อผิดพลาด: "ข้อผิดพลาดในการอ่าน settings.xml ... "


3
ในขณะที่คำตอบ Cletus' เป็นข้อมูลมากคำตอบนี้อยู่ในความรู้สึกที่เข้มงวดมากขึ้นสิ่งที่ผมกำลังมองหา (ให้ดูเหมือนว่าจะมีการขาดกลไกใด ๆ ไฟล์ settings.xml รายงานใน Maven เอง)
harschware
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.