Maven: Lifecycle vs. Phase vs. Plugin vs. Goal [ปิดแล้ว]


106

ผู้พัฒนาค่อนข้างใหม่ที่นี่แม้ว่าฉันจะใช้งานมาระยะหนึ่งแล้ว แต่ฉันหวังว่าจะเสริมสร้างพื้นฐาน Maven ของฉัน ปัญหาส่วนหนึ่งของฉันคือฉันไม่มีประสบการณ์กับ Ant ซึ่งดูเหมือนจะมาจากที่ที่มีคำอธิบายมากมาย ฉันอ่านและดูบทแนะนำต่างๆมาตลอดและฉันก็มักจะได้ยินคำศัพท์เดิม ๆ :

  • วงจรชีวิต
  • เฟส
  • เสียบเข้าไป
  • เป้าหมาย

จากสิ่งที่ฉันได้เรียนรู้มาดูเหมือนว่าวงจรชีวิตจะกว้างที่สุดและประกอบด้วย (หรือเสร็จสิ้นโดย) ขั้นตอนปลั๊กอินและ / หรือเป้าหมาย

คำถาม : คุณสามารถให้ข้อมูลเกี่ยวกับความเกี่ยวข้องของคำเหล่านี้และตัวอย่างที่พบบ่อยที่สุดได้หรือไม่?

ยิ่งชัดเจนและเป็นพื้นฐานยิ่งดี!



ขอบคุณ @Drejc - ไม่น่าเชื่อว่าฉันไม่พบสิ่งนี้ในการค้นหาของฉัน ฉันจะอ่านมันตอนนี้
Jeff Levine

2
ดังนั้นเพื่อความชัดเจนสร้าง lifecycle = lifecycleซึ่งมีสามประเภท: default, clean และ site? คำอธิบายอื่น ๆ มีฉันคิดมีวงจรชีวิตที่สี่เรียกว่าสร้าง
Jeff Levine


3
กว้างเกินไป? สิ่งนี้เกี่ยวข้องกับพื้นฐานหลักของ Maven และมีคำตอบที่ดีและละเอียด ผู้ดูแลที่ไม่มีแท็กมาเวนไม่ควรได้รับอนุญาตให้ตัดสินใจเรื่องนี้
Gerold Broser

คำตอบ:


73

วงจร Mavenเป็น (นามธรรม) แนวคิดที่ครอบคลุมทุกขั้นตอน (หรือดีกว่า: ขั้นตอนทั้งหมดที่ Maven ออกแบบตัดสินใจที่จะสนับสนุน) ที่คาดว่าจะเกิดขึ้นในโครงการพัฒนาชีวิต ขั้นตอน (หรือขั้นตอน) เหล่านี้เรียกว่าขั้นตอนในศัพท์ Maven

ปลั๊กอิน Mavenเป็นภาชนะสำหรับผู้จัดจำหน่าย / ของเป้าหมาย รหัสที่นำไปใช้ในเป้าหมายคือม้าทำงานที่แท้จริง ( Maven ในแกนกลางเป็นเพียงการจัดการปลั๊กอินและดำเนินการตามเป้าหมาย ) เป้าหมายของปลั๊กอินแต่ละรายการสามารถกำหนด / ผูกมัดกับช่วงอายุการใช้งานใดก็ได้

เมื่อเรียกใช้mvn <phase> Maven ผ่านทุกขั้นตอน (ทุกครั้ง) และดำเนินการตามเป้าหมายทั้งหมด (จัดทำโดยปลั๊กอิน) ที่ผูกไว้กับขั้นตอนใด ๆก่อนหน้าและถึง (และรวมถึง) เฟสที่กำหนด หากมีเฟสที่ไม่มีเป้าหมายผูกมัดจะไม่มีอะไรทำ แต่เฟสจะผ่านไปอย่างไรก็ตาม

กล่าวคือคุณไม่สามารถ"" แทรก "ระยะเพิ่มเติม"ลงในวงจรชีวิตในตัวของ Maven ได้ พวกเขาอยู่ที่นั่นเสมอ! คุณสามารถพัฒนาวงจรชีวิตของคุณเองด้วยขั้นตอนของมันเอง แต่นั่นยังไกลเกินกว่าที่จะใช้ Maven อย่างที่เป็นอยู่

นอกจากนี้ยังสามารถดำเนินการเป้าหมายได้โดยตรงซึ่งคุณจะได้รับแจ้งเมื่อทำงานmvnโดยไม่มีเฟสหรือเป้าหมายใด ๆ [มีการแบ่งบรรทัดและย่อให้อ่านง่ายที่นี่]:

You must specify a valid lifecycle phase or a goal in the format

<plugin-prefix>:<goal> or

<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>.

Available lifecycle phases are:

... see actual output or 'Maven, Introduction to the Build Lifecycle' at 'References' below ...

อ้างอิง:

หากคุณเคยสงสัยว่า Maven รู้ได้อย่างไรว่าต้องทำอะไรโดยไม่มีเป้าหมายใด ๆ ใน POM จะมีลิงค์ไปdefault-bindings.xmlที่ท้ายซึ่งอยู่ใน<Your Maven installation>/lib/maven-core-x.y.z.jar/META-INF/plexus/default-bindings.xml.

ขั้นตอนสำหรับวงจรชีวิตในตัว ( ทำความสะอาด , เริ่มต้น , เว็บไซต์ ) มีการประกาศในภายใต้<Your Maven installation>/lib/maven-core-x.y.z.jar/META-INF/plexus/components.xml.../<component>/<role>org.apache.maven.lifecycle.Lifecycle


41

Maven: Lifecycle vs. Phase vs. Plugin vs. Goal

การตอบช้าเพียงเพื่อชี้แจงความละเอียดอีกระดับที่ขาดหายไปในชุดข้อความนี้นั่นคือการประหารชีวิต (ของเป้าหมาย) ซึ่งเป็นหน่วยที่เล็กที่สุดของโครงสร้าง Maven

ดังนั้นเราจึงสร้างวงจร (โดยทั่วไปคือชุดของการดำเนินการสำหรับเป้าหมายโดยรวมที่เฉพาะเจาะจง) ซึ่งประกอบด้วยขั้นตอน (ความละเอียดต่ำกว่าขั้นตอนรอบ) ซึ่งสามารถเรียกใช้ชุดของเป้าหมายที่กำหนดโดยปลั๊กอินบางตัวได้ นั่นคือ Maven (ยัง) เป็นตัวดำเนินการปลั๊กอินแต่ละปลั๊กอินสามารถเสนอเป้าหมายได้ตั้งแต่หนึ่งเป้าหมายขึ้นไป จากนั้นคุณ (ยัง) ตัดสินใจว่าเป้าหมายใดที่เชื่อมโยงกับระยะใดซึ่งส่วนใหญ่ในวงจรชีวิตที่ผิดปกติ (ไม่ต้องมีนั่นคือค่าเริ่มต้น) แต่คุณสามารถมีอีกระดับได้จริง ๆ : การดำเนินการ (เป้าหมายเดียวกันจากปลั๊กอินเดียวกันหรือเป้าหมายที่แตกต่างจากปลั๊กอินที่แตกต่างกัน)

ภาพที่ฉันเตรียมที่จะดำเนินการต่อทั้งหมด ป้อนคำอธิบายภาพที่นี่

และนี่คือวิธีที่ Maven แสดงให้เห็น (หน่วยงานที่เล็กที่สุด) ผ่านสตริงที่ไม่ซ้ำกันในบันทึกการสร้าง:

plugin-artifactId:plugin-version:plugin-goal (goal-execution-id) @ project-name

ตัวอย่างเช่นเราจะมี:

[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ sample-project ---

ซึ่งหมายความว่า (ผ่านระดับความละเอียดที่แตกต่างกัน):

  • ในcompileช่วง (ไม่ได้กล่าวถึงขออภัย)>
  • ฉันกำลังเรียกใช้ปลั๊กอิน Maven Compiler ( artifactIdและversion)>
  • ฉันกำลังเรียกใช้compileเป้าหมาย>
  • ตามที่กำหนดโดยการdefault-compileดำเนินการ

มันไม่เหมือนใครเพราะจริงๆแล้วคุณสามารถมีเป้าหมายเดียวกัน (ของปลั๊กอินเดียวกัน) ที่ผูกไว้กับเฟสที่แตกต่างกันหรือไปยังเฟสเดียวกัน แต่ในการดำเนินการที่แตกต่างกัน (นั่นคือการกำหนดค่าที่แตกต่างกัน) maven-compiler-pluginเช่นนี้ยังใช้ในช่วงtest-compileระยะ (เฟสที่แตกต่างกัน) เพื่อรวบรวมรหัสการทดสอบ (ผ่านทางtestCompileประตู) ในการดำเนินการที่แตกต่างกัน ( default-testCompile) นอกจากนี้คุณยังสามารถคอมไพล์ (โดยใช้ปลั๊กอินและเป้าหมายเดียวกัน) โค้ดที่สร้างขึ้นโดยอัตโนมัติในระหว่างเฟสอื่นตามที่กำหนดโดยการดำเนินการที่คุณระบุไว้ใน POM (และอาจเป็นการกำหนดค่าที่แตกต่างกัน)

การดำเนินการตามค่าเริ่มต้นจะจัดเตรียมไว้ให้ทันทีผ่านการเชื่อมบรรจุภัณฑ์ Mavenนั่นคือโดยค่าเริ่มต้น (และบังคับใช้การกำหนดค่ามากกว่าการกำหนดค่า) Maven ได้เรียกใช้เป้าหมายบางอย่าง (ของปลั๊กอินมาตรฐาน) ในบางช่วงแล้ว รหัสการประหารชีวิตของสวดเริ่มต้นเหล่านี้จะถูกกำหนดตามการประชุมบางอย่าง

นอกจากนี้ยังอธิบายว่าเหตุใดหากคุณต้องการแทนที่พฤติกรรมเริ่มต้น (การเชื่อมโยง) ของโครงสร้าง Maven คุณต้องระบุ (แทนที่) รหัสการดำเนินการเดียวกันทั้งหมดใน POM ของคุณสำหรับปลั๊กอินเดียวกัน ตัวอย่างเช่นคุณสามารถข้ามการคอมไพล์ได้เพียงแค่กำหนดการเรียกใช้งานmaven-compiler-pluginด้วยdefault-compileid เดียวกันแต่ผูกไว้กับเฟสที่ไม่มีอยู่ (หรืออันที่ว่างเปล่า)

หากต้องการทำให้สั้น : การดำเนินการจะบอก Maven ว่าเป้าหมายใดที่จะดำเนินการกับการกำหนดค่าภายในระยะใด

การดำเนินการบางอย่างมีให้โดยค่าเริ่มต้น (การผูกแบบ defaul) ซึ่งอธิบายได้ว่าทำไมmaven ต่ำสุดเพียง6บรรทัดสามารถทำอะไรได้มากมาย (คอมไพล์ทดสอบแพ็กเกจ ฯลฯ ): การดำเนินการตามเป้าหมายของปลั๊กอินมาตรฐานในบางช่วง: เป็นไปตามการประชุม การกำหนดค่า จากนั้นผ่านการpom.xmlกำหนดค่าคุณสามารถเพิ่มสิ่งต่างๆ (การดำเนินการ) ในการสร้างหรือมีอิทธิพลต่อพฤติกรรมของปลั๊กอินที่กำหนดค่าไว้แล้ว (ในกรณีนี้ไม่มีexecutionsส่วน แต่configurationก็เพียงพอแล้ว)

ใช่คุณสามารถข้ามรอบการสร้าง (และขั้นตอน) และเรียกใช้เป้าหมาย (ของปลั๊กอิน) ได้โดยตรง ลองนึกภาพต่อไปนี้:

mvn compiler:compile
mvn compiler:testCompile
mvn surefire:test
mvn jar:jar

(หมายเหตุ: คุณสามารถเรียกใช้อินไลน์ได้ในการโทรเพียงครั้งเดียว)

ที่นี่เรากำลังรวบรวมโค้ดแอพโค้ดทดสอบรันการทดสอบและแพ็กเกจ: ลองนึกดูว่าสิ่งนี้จะเป็นแบบแมนนวลเกิดข้อผิดพลาดซ้ำซากและใช้เวลานานแค่ไหน การประชุมมากกว่าการกำหนดค่าช่วยให้เรา: Maven แนะนำวงจรชีวิตและขั้นตอนการสร้าง วงจรชีวิตเริ่มต้น (ไม่มีชื่อนั่นคือค่าเริ่มต้น) จัดเตรียมช่วงต่างๆตามแนวทางปฏิบัติที่ดีที่สุดและอนุสัญญา (มนต์ของ Maven)
หากคุณต้องการบรรลุผลดังกล่าวข้างต้นเพียงแค่เรียกใช้: จากmvn packageนั้นจะรวบรวมทดสอบและจัดแพ็คเกจโครงการของคุณโดยอัตโนมัติ อย่างไร? การเรียกใช้ปลั๊กอิน นั่นคือขั้นตอนเป็นชุดการดำเนินการปลั๊กอิน (เป้าหมาย) ที่มีความหมายและกำหนดค่าได้ เพื่อให้เป็นมาตรฐานยิ่งขึ้นสำหรับแต่ละเฟส Maven จะเรียกขั้นตอนก่อนหน้าใด ๆ ก่อนดังนั้นเช่นถ้าคุณต้องการทดสอบคุณจะต้องแน่ใจว่าคุณรวบรวมก่อน

ps โปรดทราบว่าเมื่อระบุหลายเป้าหมายสำหรับสิ่งเดียวกันexecutionคุณจะยังคงเห็นได้อย่างชัดเจนในบันทึกการสร้างการดำเนินการที่แตกต่างกันสองรายการ (ด้วยรหัสเดียวกัน) สำหรับเป้าหมายที่แตกต่างกันสองเป้าหมาย (ดังนั้นทูเปิลยังคงไม่ซ้ำกัน)


18

ให้เครดิตกับ Sandeep Jindal และ Premraj (จากที่นี่เป้าหมายและระยะของ Maven คืออะไรและความแตกต่างคืออะไร ) คำอธิบายของพวกเขาช่วยให้ฉันเข้าใจ

ฉันสร้างตัวอย่างโค้ดบางอย่างเต็มรูปแบบและบางคำอธิบายง่าย ๆ ที่นี่https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ ฉันคิดว่ามันอาจช่วยให้คนอื่นเข้าใจและสามารถลองทำอะไรได้โดยตรง

กล่าวโดยย่อจากลิงค์คุณไม่ควรพยายามทำความเข้าใจทั้งสามพร้อมกันก่อนอื่นคุณควรเข้าใจความสัมพันธ์ในกลุ่มเหล่านี้:

  • วงจรชีวิตเทียบกับเฟส
  • ปลั๊กอินเทียบกับเป้าหมาย

1. วงจรชีวิตเทียบกับเฟส

วงจรชีวิตคือชุดของขั้นตอนในลำดับดูที่นี่Life Cycle อ้างอิง เมื่อคุณโทรเฟสมันจะเรียกเฟสทั้งหมดก่อนหน้านั้นด้วย

ตัวอย่างเช่นวงจรชีวิตที่สะอาดมี 3 ขั้นตอน ( ก่อนทำความสะอาด, ทำความสะอาด, หลังการทำความสะอาด )

mvn clean

มันจะเรียกก่อนการทำความสะอาดและทำความสะอาด

2. ปลั๊กอินเทียบกับเป้าหมาย

เป้าหมายเป็นเหมือนการดำเนินการในปลั๊กอิน ดังนั้นถ้าปลั๊กอินเป็นคลาสเป้าหมายคือวิธีการ

คุณสามารถเรียกเป้าหมายดังนี้:

mvn clean:clean

ซึ่งหมายความว่า "เรียกเป้าหมายที่สะอาดในปลั๊กอินที่สะอาด" (ไม่มีอะไรเกี่ยวข้องกับระยะสะอาดที่นี่อย่าปล่อยให้คำว่า "สะอาด" ทำให้คุณสับสนเพราะไม่เหมือนกันดูคำอธิบายทั้งหมดในลิงค์ด้านบน)

3. ตอนนี้ความสัมพันธ์ระหว่างเฟสและเป้าหมาย:

เฟสสามารถ (ก่อน) เชื่อมโยงไปยังเป้าหมายได้ตัวอย่างเช่นโดยปกติเฟสสะอาดจะเชื่อมโยงไปยังเป้าหมายที่สะอาด ดังนั้นเมื่อคุณเรียกคำสั่งนี้:

mvn clean

มันจะเรียกเฟสก่อนการทำความสะอาดและระยะสะอาดซึ่งเชื่อมโยงไปยังเป้าหมายที่สะอาด: สะอาด

เกือบจะเหมือนกับ:

mvn pre-clean clean:clean

1
@ 2. & 3. IMHO clean:cleanไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับตัวอย่าง มี 4 รายการที่ชื่อclean(วงจรชีวิตเฟสปลั๊กอินเป้าหมาย) ซึ่งอาจทำให้สับสนโดยเฉพาะสำหรับผู้เริ่มต้น (ฉันจำได้ว่ามันเป็นของฉันในตอนเริ่มต้น) @ 3.คำกริยา "link" ก็ไม่ใช่ตัวเลือกที่ดีเช่นกัน IMHO คำ Maven อย่างเป็นทางการคือ " ผูก "
Gerold Broser

@GeroldBroser. เห็นด้วยอย่างยิ่งกับความสะอาด: สะอาด ฉันได้อธิบายและเตือนแล้วในคำอธิบายทั้งหมดของฉันในลิงค์ ฉันจะคัดลอกคำเตือนนั้นไปที่นี่ด้วย เหตุผลที่ฉันใช้มันเพราะเป็นการดีที่จะให้คนอื่นรู้เกี่ยวกับคำที่สับสนนี้และโดยเฉพาะอย่างยิ่งเอกสาร maven ที่เป็นทางการกำลังใช้มันและอธิบายได้อย่างชัดเจน และใช่มันทำให้ฉันสับสนเช่นกัน ยังไงก็ขอบคุณมากสำหรับความคิดเห็น
Surasin Tancharoen

พิมพ์ผิด: ใช้เอกสาร maven อย่างเป็นทางการและอธิบายไม่ชัดเจน
สุรสินตันเจริญ

17

และอีกแผนภาพที่คาดไม่ถึง

  • วงจรชีวิตเป็นรูปสี่เหลี่ยมผืนผ้าสีเหลือง
  • ขั้นตอนของวงจรชีวิตเป็นรูปสี่เหลี่ยมสีฟ้าที่มี ระยะ"เรียกได้" เป็นสีน้ำเงินเข้ม (กล่าวคือโดยปกติจะไม่เรียกขั้นตอนที่มีการยัติภังค์จากบรรทัดคำสั่งเนื่องจากอาจไม่ได้รับการออกแบบให้ออกจากโครงการในสถานะที่กำหนดไว้อย่างชัดเจน)
  • เป้าหมายเป็นคอร์เซ็ตสีน้ำเงิน สมาคม / ผูกพัน "เฟส -> เป้าหมาย" แสดงให้เห็นว่าเป็นหนึ่งใน "โถที่" โหมดการบรรจุภัณฑ์ ทุกขั้นตอนสามารถมีเป้าหมายที่ผูกพันกับมัน สิ่งนี้ถือแน่นอนสำหรับแต่ละวงจรชีวิตแม้ว่าการเชื่อมโยงจะแสดงเฉพาะสำหรับวงจรชีวิต "เริ่มต้น" เท่านั้น
  • ปลั๊กอินเป็นรูปสี่เหลี่ยมตัดสีเทา ปลั๊กอินให้เป้าหมายที่สามารถผูกไว้กับเฟส

Maven Lifecycles, Phase, Goals, Plugins


ไฟล์ graphml (แก้ไขด้วยโปรแกรมแก้ไข yEd ฟรี) มีอยู่ที่github.com/dtonhofer/diagrams
David Tonhofer

1) หมายความว่าอย่างไรโดย"เฟส " ที่เรียกได้ "" ที่ "เป็นสีน้ำเงินเข้มกว่า "อย่างไร ทุกเฟสของ Maven นั้น "เรียกได้" (แม้ว่าฉันจะเรียกมันว่าinvokableเนื่องจากไม่มีรหัสที่เรียกโดยตรงโดยการเรียกใช้เฟส) หรือคุณเรียกขั้นตอน " callable " ที่มีเป้าหมายผูกพันกับมัน (โดยค่าเริ่มต้น)? ไม่ได้ว่าเป็นความจริงหากดูvalidate, และinitialize verify
Gerold Broser

2) resources:[testR|r]esourcesเป้าหมายไม่ได้ผูกไว้กับprocess-sourcesหรือprocess-test-sourcesขั้นตอนในjarวงจรชีวิต
Gerold Broser

3) modello:javaของปลั๊กอิน Modelloเป็นเฉพาะโดเมน การผูกเป้าหมายของปลั๊กอินเข้ากับเฟสถือไว้สำหรับเฟสใด ๆ
Gerold Broser

@GeroldBroser คงตามคอมเม้น. "Callable" หมายความว่าสามารถเรียกใช้งานได้จากบรรทัดคำสั่งและคาดว่าโครงการจะยังคงอยู่ในสถานะที่ถูกต้อง ไม่มีความแตกต่างที่มีความหมายระหว่างการโทรและการเรียกและการเรียกคือสิ่งที่Maven Introductionใช้
David Tonhofer

12

ที่มานี้เป็นการสอนที่ดีจริงๆ

Lifecycles, Lifecycle Phases, Plugins และ Plugin Goals เป็นหัวใจหลักของ Maven

  • mvnคำสั่ง Maven ยอมรับได้เฉพาะ Lifecycle Phase หรือ Plugin Goal เป็นอาร์กิวเมนต์
  • Maven มาพร้อมกับสามวงจรชีวิต - ค่าเริ่มต้นสะอาดและไซต์
  • วงจรชีวิตแต่ละช่วงประกอบด้วยเฟสของวงจรการใช้งานและโดยรวมแล้วมี 28 เฟส - ค่าเริ่มต้น 21 ( ตรวจสอบความถูกต้อง, ... , คอมไพล์, ... , แพ็กเกจ, ... , ติดตั้ง, ปรับใช้ ), ล้าง 3 ( ล้างล่วงหน้า, สะอาดหลังการทำความสะอาด ) และไซต์ 4 ( ก่อนไซต์ไซต์หลังไซต์ไซต์ปรับใช้ )
  • เมื่อเฟสวงจรชีวิตถูกเรียกใช้โดยใช้คำสั่ง mvn เฟสก่อนหน้าทั้งหมดจะถูกดำเนินการตามลำดับทีละขั้น
  • ขั้นตอนของวงจรชีวิตด้วยตัวมันเองไม่มีความสามารถใด ๆ ในการทำงานบางอย่างให้สำเร็จและพวกเขาต้องพึ่งพาปลั๊กอินเพื่อดำเนินงาน
  • ขึ้นอยู่กับโครงการและประเภทบรรจุภัณฑ์Maven จะผูกเป้าหมายปลั๊กอินต่างๆเข้ากับขั้นตอนของวงจรชีวิตและเป้าหมายเพื่อดำเนินงานที่มอบหมายให้พวกเขา

เมื่อเราวิ่ง "แพ็คเกจ mvn " ในโครงการ Java Maven จะผูกเป้าหมายของปลั๊กอินเข้ากับช่วงอายุการใช้งานดังที่แสดงในรูปถัดไป

mvn-plugins-package-goal


1
เนื้อหาที่คุณพูดถึงนั้นค่อนข้างดี ขอบคุณ!
William Kinaan

@ " mvnคำสั่ง Maven สามารถยอมรับเฉพาะ Lifecycle Phase หรือ Plugin Goal เป็นอาร์กิวเมนต์ " ไม่ถูกต้อง ยอมรับตัวเลือกเช่นกัน
Gerold Broser

" เมื่อเราเรียกใช้" แพ็กเกจ mvn "ในโครงการ Java Maven จะผูกเป้าหมายของปลั๊กอินกับช่วงอายุการใช้งาน " ไม่เป็นความจริง การผูกเป้าหมายเกิดขึ้นนานก่อนที่จะทำงานmvn ...: ในdefault-bindings.xmlหรือใน POM และ Maven ไม่ได้ทำโดยมนุษย์
Gerold Broser

7

ดังนั้นเพื่ออธิบายเพิ่มเติมเล็กน้อยตามที่อธิบายไว้ที่นี่

การสร้าง Maven แบ่งออกเป็นวงจรชีวิต ได้แก่ :

  • สะอาด
  • สร้าง (ค่าเริ่มต้น)
  • เว็บไซต์

แต่ละรอบนี้จะแบ่งออกเป็นเฟส ตัวอย่างเช่นการสร้างอินสแตนซ์แบ่งออกเป็นขั้นตอนเช่น:

  • เตรียมทรัพยากร
  • รวบรวม
  • แพ็คเกจ
  • ติดตั้ง

ขั้นตอนมีเป้าหมายในการดำเนินการก่อนก่อนหรือหลังการโพสต์เฟสเช่น:

  • ก่อนทำความสะอาด - จะดำเนินการก่อนขั้นตอนการทำความสะอาด
  • post-clean - จะดำเนินการหลังจากขั้นตอนการล้าง

คุณสามารถดูเป้าหมายเป็นขั้นตอน "แทรก" เพิ่มเติมได้หากต้องการ อ่านที่นี่หรือดูคำตอบของ @Geroldsสำหรับรายละเอียด


1
คำตอบนี้ไม่ถูกต้องทั้งหมด ดูคำตอบของฉัน
Gerold Broser

โอเด็ก 3 ปีตั้งแต่คุณตอบคำถามนี้ ... และยังคงไม่ปล่อยให้มันไป .. คุณชนะ ... ตอนนี้ไปต่อ
Drejc

มันไม่เกี่ยวกับการชนะ คุณไม่แก้ไขคำถามคำตอบและความคิดเห็นเก่า ๆ หรือไม่ถ้าคุณเจอคำถามเหล่านี้ในภายหลัง?
Gerold Broser

3

LifeCycle vs Phases: Life Cycleเป็นชุดของphases. เมื่อคุณโทรเฟสมันจะเรียกเฟสทั้งหมดที่มาก่อนหน้านั้นด้วย Maven มาพร้อมกับวงจรชีวิตการสร้างในตัว 3 วงจรดังนี้:

  1. ทำความสะอาดวงจรชีวิต - สิ่งนี้เกี่ยวข้องกับการทำความสะอาดโครงการ (สำหรับการสร้างและการปรับใช้ใหม่)
  2. วงจรชีวิตเริ่มต้น / สร้าง - สิ่งนี้จัดการการปรับใช้โครงการทั้งหมด
  3. วงจรชีวิตของไซต์ - สิ่งนี้จัดการการสร้างเอกสาร java ของโครงการ ป้อนคำอธิบายภาพที่นี่

วงจรชีวิตการทำความสะอาดมี 3 ขั้นตอนคือทำความสะอาดก่อนทำความสะอาดและหลังการทำความสะอาด ระยะของวงจรชีวิตเริ่มต้นและไซต์จะเหมือนกับที่แสดงในภาพ


ย่อหน้าสุดท้ายของคุณทำให้เข้าใจผิด โดยเฉพาะประโยคแรกและประโยคสุดท้าย เป้าหมายและขั้นตอนเป็นสิ่งที่แตกต่างกันโดยสิ้นเชิง คุณต้องไม่สับสนเพราะบางคนมีชื่อเหมือนกัน Re " เป้าหมายคือระยะที่คุณเห็นในภาพด้านบน ": ไม่มีเป้าหมายเดียวที่กล่าวถึงในภาพ เหล่านี้ทุกขั้นตอน เรื่อง " คุณเขียนชื่อเฟสเป็น 'เป้าหมาย' เมื่อคุณมีเป้าหมายในการดำเนินการบางอย่าง. ": ในขณะที่มันเป็นไปได้ที่จะเรียกใช้ปลั๊กอินเป้าหมายของ explicitely ทางปกติคือการดำเนินการสร้างถึงบางขั้นตอนmvn <phase>ด้วย ดูคำตอบของฉันที่นี่
Gerold Broser

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