วิธีการเรียกใช้ Maven จากไดเรกทอรีอื่น (ไม่มี cd ไปยังโปรเจ็กต์ dir)?


249

เผื่อว่าโครงการ Maven ของฉันตั้งอยู่ใน/some/location/projectสถานที่ตั้งปัจจุบันของฉันคือ/another/location/วิธีการที่ฉันสามารถเรียกใช้ Maven สร้างโดยไม่ได้เปลี่ยนไปยังสถานที่โครงการcd /some/location/project?


4
@khmarbaise - ฉันกำลังพยายามสร้างและปรับใช้แบบอัตโนมัติโดยใช้เชลล์สคริปต์บางตัวและไม่สามารถใช้ cd เพื่อเปลี่ยน dir ได้เสมอ
Ali Shakiba

@khmarbaise - คุณอาจต้องการอ้างถึงหลายไฟล์หรือโฟลเดอร์ในหรือใกล้กับไดเรกทอรีหนึ่ง แต่ pom และไฟล์ที่อ้างถึงของคุณนั้นอยู่ในอีกไดเรกทอรีหนึ่ง
jyoungdev

คำตอบ:


432

คุณสามารถใช้พารามิเตอร์-fและระบุพา ธ ไปยังไฟล์ pom ของคุณเช่นmvn -f /path/to/pom.xml

สิ่งนี้จะเรียกใช้ maven "ราวกับว่า" มันอยู่ใน/path/toไดเรกทอรีการทำงาน


39
ไม่ -f เริ่มต้น Maven ด้วย pom เฉพาะนั้นและโดยนิยามไดเรกทอรีที่ pom คือเป็นไดเรกทอรีที่ใช้งานได้สำหรับ Maven ฉันใช้สิ่งนี้ใน CI-Server ของฉันเพื่อสร้างโมดูลเฉพาะในไดเรกทอรีย่อยและฉันรับรองได้ว่ามันใช้งานได้
dunni

15
ใช้จุดสำหรับเส้นทางสัมพัทธ์ เช่น./path/pom.xml
Snekse

3
อย่างที่ดันนี่บอกว่ามันไม่ได้ผล dir ปัจจุบันคือที่ที่คุณอยู่ คุณแค่ใช้ pom กับ dir อื่น Maven ไม่สนับสนุนสิ่งนี้
หมอก

1
java.lang.IllegalArgumentException: พารามิเตอร์ 'directory' ไม่ใช่ไดเรกทอรี
Damir Olejar

เหมาะสำหรับโครงการส่วนใหญ่ของฉัน น่าเสียดายที่บางโครงการที่ใช้ปลั๊กอิน exec ไม่สามารถสร้างด้วยวิธีนี้ได้เนื่องจากปลั๊กอินไม่พบไฟล์ปฏิบัติการแม้ว่าจะมีการกำหนดค่าไดเรกทอรีทำงาน
user2043553

15

ฉันไม่คิดว่า maven สนับสนุนสิ่งนี้ หากคุณใช้ระบบปฏิบัติการ Unix และไม่ต้องการออกจากไดเรกทอรีปัจจุบันคุณสามารถใช้เชลล์สคริปต์ขนาดเล็กฟังก์ชันเชลล์หรือเพียง sub-shell:

user@host ~/project$ (cd ~/some/location; mvn install)
[ ... mvn build ... ]
user@host ~/project$

เป็นฟังก์ชั่นทุบตี (ซึ่งคุณสามารถเพิ่มใน ~ / .bashrc ของคุณ):

function mvn-there() {
  DIR="$1"
  shift
  (cd $DIR; mvn "$@")     
} 

user@host ~/project$ mvn-there ~/some/location install)
[ ... mvn build ... ]
user@host ~/project$

ฉันรู้ว่านี่ไม่ได้ตอบคำถามเฉพาะ แต่อาจให้สิ่งที่คุณต้องการ ฉันไม่คุ้นเคยกับเชลล์ของ Windows แม้ว่าคุณควรจะสามารถเข้าถึงโซลูชันที่คล้ายกันได้เช่นกัน

ความนับถือ


4
ยอดเยี่ยม mvn -f param ไม่ทำงานกับโปรเจ็กต์หลายโมดูลโดยใช้พา ธ สัมพัทธ์เพื่ออ้างอิงลูกปอม ขอบคุณนั่นคือสิ่งที่ฉันกำลังมองหา
redochka

1
เตรียมพร้อมใช้งานบน Mac (และฉันรู้ว่ามันจะทำงานบน Linux) บน Windows (หรือแพลตฟอร์มใด ๆ ) คุณควรจะสามารถบันทึกพา ธ ปัจจุบันไปที่โปรเจ็กต์ของคุณทำสิ่งที่มีอยู่แล้วและย้อนกลับไปที่สคริปต์ ปัญหาเดียวก็คือถ้าสคริปต์หยุดกลางคัน
Erk


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.