Mvn ติดตั้งหรือแพ็คเกจ Mvn


134

ฉันยังใหม่กับ Maven ฉันมีโปรเจ็กต์เว็บที่ใช้ Java ซึ่งมีการกำหนดค่า maven ใน MyEclipse ของฉัน
ตอนนี้ถ้าฉันแก้ไขไฟล์ java ฉันต้องทำRun as -> Mvn installหรือMvn package?

คำตอบ:


158

จากhttp://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package: นำโค้ดที่คอมไพล์แล้วมาทำแพ็กเกจในรูปแบบที่แจกจ่ายได้เช่น JAR

install: ติดตั้งแพ็กเกจลงในที่เก็บโลคัลเพื่อใช้เป็นการอ้างอิงในโปรเจ็กต์อื่นในเครื่อง

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


ฉันมีโครงการที่ฉันกำลังแปลงรหัสโฟลเดอร์หลักและรหัสโฟลเดอร์ทดสอบเป็น Jar จากนั้นฉันต้องการปรับใช้สิ่งนี้ใน nexus เพื่อให้โครงการอื่นสามารถใช้งานได้ คำสั่งปรับใช้ของฉันคือ "mvn clean deploy -DskipTests" ฉันสามารถสร้างแพ็คเกจคำสั่งนี้แทนการติดตั้งลงในโลคัล repo ได้หรือไม่
MasterJoe

@ MasterJoe2 "ถ้าอย่างนั้นฉันต้องการนำสิ่งนี้ไปใช้ในเน็กซัส"นั่นคือสิ่งที่deployทำ หากคุณแทนที่ด้วยpackageจะไม่สามารถใช้งานได้กับ Nexus
walen

37

mvn installเป็นตัวเลือกที่ใช้บ่อยที่สุด
mvn packageไม่ค่อยมีการใช้งานเฉพาะในกรณีที่คุณกำลังแก้ไขปัญหาบางอย่างกับกระบวนการสร้าง maven

ดู: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

โปรดทราบว่าmvn packageจะสร้างเฉพาะไฟล์ jar
mvn installจะทำเช่นนั้นและติดตั้งไฟล์ jar (และ class เป็นต้น) ในตำแหน่งที่เหมาะสมหากโค้ดอื่นขึ้นอยู่กับ jar เหล่านั้น

ฉันมักจะทำmvn clean install; ซึ่งจะลบtargetไดเร็กทอรีและสร้างไหทั้งหมดใหม่ในตำแหน่งนั้น
การทำความสะอาดจะช่วยให้มีสิ่งของที่ไม่จำเป็นหรือนำออกซึ่งบางครั้งอาจกีดขวางได้
แทนที่จะดีบัก (บางครั้ง) เพียงแค่เริ่มต้นใหม่ตลอดเวลา


27
ฉันไม่เห็นด้วยที่ไม่ค่อยมีการใช้แพ็กเกจ 2 คะแนน 1) จะทำงานทุกครั้งที่คุณเรียกใช้การติดตั้ง 2) หากคุณกำลังสร้าง. war การเรียกใช้แพ็คเกจก็ใช้ได้เพราะคุณไม่จำเป็นต้องทำสงครามใน repo ในพื้นที่ของคุณ
Joshua Wilson

5
คำตอบไม่ได้อธิบายว่าทำไมคุณถึงต้องการติดตั้งลงในที่เก็บในเครื่อง ในความเข้าใจของฉันถ้าโครงการตั้งค่าถูกต้องเครื่องปฏิกรณ์จะให้การอ้างอิงระหว่างโมดูล หากตั้งค่าโปรเจ็กต์ไม่ถูกต้องการติดตั้งก็สามารถซ่อนข้อเท็จจริงนี้และใช้สิ่งประดิษฐ์ที่ไม่ถูกต้อง หากคุณมีโครงการที่ต้องพึ่งพาซึ่งจะต้องสร้างแยกกันด้วยเหตุผลบางประการคุณจึงต้องการติดตั้งเท่านั้น
Vsevolod Golovanov

11

จากการอ้างอิงวงจรการใช้งานการติดตั้งจะเรียกใช้การทดสอบการรวมของโปรเจ็กต์แพ็กเกจจะไม่

ถ้าคุณต้องการจริงๆที่จะได้ติดตั้งสิ่งประดิษฐ์ที่สร้างขึ้นใช้อย่างน้อยตรวจสอบ


5

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


4

หากคุณไม่ได้ใช้ที่เก็บระยะไกล (เช่นโรงงานประดิษฐ์) ให้ใช้แบบเก่า: mvn clean install

หัวข้อค่อนข้างเก่า แต่ AFAIK หากคุณเรียกใช้ที่เก็บของคุณเอง (เช่นกับโรงงานประดิษฐ์) เพื่อแบ่งปันโถในทีมของคุณคุณอาจต้องการใช้

mvn clean deploy

แทน.

ด้วยวิธีนี้เซิร์ฟเวอร์การรวมต่อเนื่องของคุณสามารถมั่นใจได้ว่าการอ้างอิงทั้งหมดถูกผลักเข้าไปในที่เก็บระยะไกลของคุณอย่างถูกต้อง หากคุณพลาดหนึ่งรายการ mvn จะไม่สามารถค้นหาได้ในที่เก็บ CI local m2 ของคุณ


1
ฉันคิดว่าคุณกำลังพูดถึง mvn clean deploy ไม่ใช่ mvn clean package
Mayjak

2

แพ็กเกจ - รับโค้ดที่คอมไพล์และแพ็กเกจในรูปแบบที่แจกจ่ายได้เช่นไฟล์ JAR หรือ WAR ติดตั้ง - ติดตั้งแพ็กเกจลงในที่เก็บในเครื่องเพื่อใช้เป็นการอ้างอิงในโปรเจ็กต์อื่นในเครื่อง


2

เหมาะสมวิธีคือmvn packageถ้าคุณไม่ได้ทำสิ่งที่ถูกต้องสำหรับส่วนหลักของการสร้างของคุณแล้วควรจะมีไม่จำเป็นต้องติดตั้งแพคเกจของคุณในพื้นที่เก็บข้อมูลท้องถิ่น

นอกจากนี้หากคุณใช้ Travis คุณสามารถ "แคช" การอ้างอิงของคุณได้เนื่องจากจะไม่แตะต้อง$HOME.m2/repositoryหากคุณใช้แพ็คเกจสำหรับโครงการของคุณเอง

ในการปฏิบัติจริงหากคุณพยายามที่จะทำmvn siteคุณมักจะต้องทำmvn installก่อน มีข้อบกพร่องมากเกินไปsiteหรือมีปลั๊กอินที่ดูแลไม่ดีจำนวนมาก


0

ขึ้นอยู่กับสิ่งที่คุณพยายามทำหลังจากเปลี่ยนไฟล์ Java จนกว่าคุณจะต้องการทดสอบกระบวนการ maven คุณไม่จำเป็นต้องทำอะไรเลย Eclipse / MyEclipse จะสร้างสิ่งที่จำเป็นและวางเอาต์พุตในตำแหน่งที่เหมาะสมภายในโปรเจ็กต์ของคุณ คุณยังสามารถเรียกใช้หรือปรับใช้งานได้ (เช่นโครงการเว็บ) โดยที่คุณไม่จำเป็นต้องทำอะไรกับ maven อย่างชัดเจน ในท้ายที่สุดในการติดตั้งโครงการของคุณในที่เก็บ maven คุณจะต้องทำการติดตั้ง maven คุณอาจมีเป้าหมาย maven อื่น ๆ ที่คุณต้องการดำเนินการซึ่ง MyEclipse จะไม่ทำโดยอัตโนมัติ

อย่างที่บอกมันขึ้นอยู่กับว่าคุณอยากทำอะไร

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