การระบุตำแหน่งที่เก็บโลคัลของ Maven เป็นพารามิเตอร์ CLI


131

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

สิ่งนี้คือฉันไม่ได้ใช้ค่าเริ่มต้นใน~/.m2/repository. อย่างไรก็ตามฉันตรวจสอบบางโครงการที่สร้างขึ้นด้วยการตั้งค่าของตัวเองด้วย-s settings.xml. settings.xml นั้นไม่ได้ระบุที่เก็บในเครื่องของฉันดังนั้น Maven จึงใช้~/.m2/repositoryอีกครั้ง ... ฉันต้องการใช้ตำแหน่งที่เก็บในเครื่องที่ไม่ใช่ค่าเริ่มต้นโดยไม่ต้องเพิ่ม<localRepository>องค์ประกอบใน settings.xml ของโปรเจ็กต์

ฉันพยายามแล้ว

  • -DlocalRepository="..."
  • $mvn invoker:run -s settings.xml clean install -DskipTests -DlocalRepositoryPath=
  • -Dsettings.localRepository

แต่ตัวเลือกเหล่านี้ไม่ได้ผล

ดังนั้นฉันคิดว่าฉันต้องตัดสินใจว่าฉันจะแก้ไข settings.xml ของบุคคลที่สามหรือย้าย repo ในเครื่องของฉันไปที่ ~


เห็นได้ชัดว่านี่ไม่ใช่ความผิดของคุณ แต่โครงการ Maven ไม่ควรให้ไฟล์settings.xml. ดูmaven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

คำตอบ:


258

ใช้คุณสมบัติ maven maven.repo.local:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

ไม่settings.xmlจำเป็นต้องปรับเปลี่ยน


10
พื้นที่เก็บข้อมูลในท้องถิ่นต้องเป็นเส้นทางแน่นอนmaven.apache.org/guides/mini/guide-configuring-maven.html
luka5z

3
บน Windows ให้ใช้ `mvn -D" maven.repo.local "=% USER_HOME% / my / other / repository clean
install`

ฉันสามารถตั้งค่าตัวแปรสภาพแวดล้อมเพื่อให้บรรลุสิ่งเดียวกันได้หรือไม่
powder366

@ powder366 no, AFAIK
Petr Kozelka

การใช้ maven-3.6.3 dir พื้นที่เก็บข้อมูลในเครื่องทำงานเป็นเส้นทางสัมพัทธ์ (บน MacOS เป็นอย่างน้อย)
Ed Randall


2

วิธีแฮ็กแบบหนึ่งที่ใช้ได้ผลคือ:

  1. เพิ่ม<localRepository>${m2.localRepository}</localRepository>ใน settings.xml ของคุณ
  2. ใน mvn.sh หรือ mvn.bat ของคุณให้เพิ่ม-Dm2.localRepository=<full path to home dir>/.m2/repository ก่อน "$ @" ในคำสั่งที่เรียกใช้งาน สิ่งนี้จะทำให้ repo ในพื้นที่เริ่มต้นของคุณอยู่ในที่ที่ควรจะเป็น
  3. ตอนนี้คุณสามารถใช้mvn -Dm2.localRepository=... <phases/goals>. เนื่องจากคุณสมบัติระบบบรรทัดคำสั่งของคุณถูกเพิ่มลงในบรรทัดคำสั่งหลังจากที่หนึ่งในสคริปต์ mvn จึงมีความสำคัญ (อย่างน้อยฉันก็ค่อนข้างมั่นใจว่ามันใช้งานได้ทั้งบน windows และ linux แต่การทดสอบจะบอก)

นั่นไม่ได้ช่วยฉันเพิ่ม -Dm2.localRepository = "กำหนดเอง" ก่อน "$ @" ลงในสคริปต์ mvn ยังคงใช้ ~ / .m2 / repository ... จากนั้นฉันก็รวม -Dm2.localRepository = "กำหนดเอง" เมื่อเรียกใช้ $ mvn ยังคงใช้ ~ / .m2 / repository ... เพียงแค่ไม่มีองค์ประกอบ localRepository ใน settings.xml ก็ไม่มีทางเปลี่ยนได้
lisak

@lisak: คุณทำขั้นตอนที่ 1 ในการเพิ่มองค์ประกอบ localRepository ไปยัง settings.xml หรือไม่? ฉันทดสอบแล้วและใช้งานได้ยกเว้นว่าคุณไม่สามารถใช้นามแฝง '~' ในสคริปต์ mvn ได้ คุณต้องใส่เส้นทางที่แน่นอนแม้ว่าคุณอาจใช้กลอุบายของเชลล์ / แบตช์สคริปต์อื่น ๆ เพื่อหลีกเลี่ยงสิ่งนั้น
Ryan Stewart

มันใช้งานได้ แต่ฉันไม่มีคำอธิบายจริงๆ ... ถ้าฉันประกาศ localRepository ใน $ M2_HOME / conf / settings.xml โดยไม่มีขั้นตอนที่ 2 มันจะถูกลบล้างโดย -s settings.xml และไม่ได้ผลแม้ว่าจะมีขั้นตอนที่ 2 มันใช้งานได้ ... แต่เฉพาะขั้นตอนที่ 2 ที่ไม่มี localRepository ใน $ M2_HOME / conf / settings.xml ไม่ทำงาน ... ต้องใช้ทั้งสองขั้นตอน 1,2 เพื่อให้มันใช้งานได้และฉันสามารถเปลี่ยนตำแหน่งได้จากนั้นผ่าน $ mvn -Dm2.localRepository = .. ขอบคุณ Ryan
lisak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.